安卓自定义弹框(Dialog)

1.在style文件中创建一个style

<style name="dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item><!-- 边框-->
    <item name="android:windowIsFloating">true</item><!--是否显示在activity之上-->
    <item name="android:windowNoTitle">true</item><!--没有标题-->
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:windowIsTranslucent">false</item>
    <item name="android:windowBackground">@color/colorTransparent</item><!--背景颜色透明-->
    <item name="android:background">@color/colorTransparent</item><!--背景透明-->
    <item name="android:backgroundDimAmount">0.5</item>
</style>

2.在layout文件中创建money_dialog(文件名)文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:orientation="vertical"
    android:background="@drawable/repeat_drawable">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textColor="@color/colorBlack"
        android:textSize="19dp"
        android:text="总金额" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/colorLightGray"/>

    <EditText
        android:id="@+id/name_editText"
        android:layout_width="match_parent"
        android:layout_marginTop="25dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_height="40dp"
        android:focusable="auto"
        android:gravity="center"
        android:inputType="number"
        android:background="@drawable/name_edit_shape"/>
        <Button
            android:id="@+id/sure_btn"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="40dp"
            android:layout_marginRight="40dp"
            android:textColor="@color/colorMian"
            android:gravity="center"
            android:textSize="18dp"
            android:text="确定"
            android:background="@null"/>
</LinearLayout>

3.创建MoneyDialog类继承自Dialog

public class MoneyDialog extends Dialog implements View.OnClickListener {

    private Context context;
    private EditText money_text;
    private Button sure_button;
    private SureOnlickLisenter lisenter;

    public MoneyDialog(@NonNull Context context) {
        super(context, R.style.dialog);
        this.context = context;
        initView();
        bindViews();
    }

    public void setLisenter(SureOnlickLisenter lisenter) {
        this.lisenter = lisenter;
    }

    private void initView() {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.money_dialog,null);
        Window window = this.getWindow();
        if (window!=null){
            window.setGravity(Gravity.CENTER);
        }
        setContentView(view);
    }

    private void bindViews() {
       money_text = findViewById(R.id.name_editText);
       sure_button = findViewById(R.id.sure_btn);
       sure_button.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        String money = money_text.getText().toString();
        if (money.length()>0){
            lisenter.sureOnlcik(Float.valueOf(money));
            dismiss();
        }else {
            Toast.makeText(context,"请输入金额",Toast.LENGTH_SHORT).show();
        }

    }

    public interface SureOnlickLisenter{
        void sureOnlcik(float money);
    }
}

super(context, R.style.dialog);设置Dialog的style否则会使用系统默认的带标题带框的格式。

在类方法中创建Dialog的view也就是initView方法。

另外该提示框需要传递数据所以声明了一个接口

public interface SureOnlickLisenter{
    void sureOnlcik(float money);
}

4.在Activity或Fragment中调用

private void showMoneyDialog(){
        MoneyDialog dialog = new MoneyDialog(context);
        dialog.show();
        Window dialogWindow = dialog.getWindow();
        WindowManager.LayoutParams params = dialogWindow.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        dialogWindow.getDecorView().setPadding(40,0,40,0);
        dialogWindow.setAttributes(params);
        dialog.setLisenter(new MoneyDialog.SureOnlickLisenter() {
            @Override
            public void sureOnlcik(float money) {
               
            }
        });
    }

点击弹框的确定按钮则Activity中会执行sureOnlcik方法并且获取弹框中输入的数据。

猜你喜欢

转载自blog.csdn.net/weixin_39339407/article/details/85089067
今日推荐