android 打造可复用的底部dialog

android 开发中我们会经常用到dialog提示框,有时候会有在屏幕底部显示dialog,但是官方并没有底部显示的dialog,这时候就需要我们自己动手自定义一个底部dialog。

不多说,直接上代码

先定义一个BottomDialog类,继承与Dialog

public class BottomDialog extends Dialog implements View.OnClickListener{

    private int layoutId;//要显示的布局文件id
    private Context context;
    private int[] listenedItems;//layout中要监听的控件id
    private OnBottomMenuItemClickListener listener;

    public BottomDialog( Context context, int layoutId, int[] listenedItems) {
        super(context, R.style.dialog_custom);
        this.context = context ;
        this.layoutId = layoutId;
        this.listenedItems = listenedItems;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(layoutId);//设置显示给定的布局文件

        Window window = getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.gravity = Gravity.BOTTOM;//设置底部显示
        WindowManager windowManager = ((Activity) context).getWindowManager(); // 宽度全屏
        //Display display = windowManager.getDefaultDisplay();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;//设置dialog宽度全屏
//        lp.width = display.getWidth()*9/10;//设置为屏幕的9/10宽
        lp.alpha = 1.0f;      //设置本身透明度
        lp.dimAmount = 0.5f;      //设置黑暗度
        this.setCanceledOnTouchOutside(true);//设置点击屏幕外取消

        //给控件添加监听事件
        for (int viewId : listenedItems) {
            findViewById(viewId).setOnClickListener(this);
        }
    }

 /**
     * 获取布局中的控件
     * @param viewId
     * @param 
     * @return
     */
    public  T getView(int viewId){
        View view = findViewById(viewId);

        return (T) view;

    }
    @Override
    public void onClick(View v) {
        dismiss();
        listener.onBottomMenuItemClick(this,v);
    }

    //设置事件监听的接口
    public interface OnBottomMenuItemClickListener {

        void onBottomMenuItemClick(BottomDialog dialog, View view);

    }

    public void setOnBottomMenuItemClickListener(OnBottomMenuItemClickListener listener) {
        this.listener = listener;
    }
}

其中R.style.dialog_custom 为自己定义的样式

 -- dialog样式 -->
    

然后再在activity中调用

final int[] views = new int[2];
views[0] = R.id.input_dialog_sure;
views[1] = R.id.input_dialog_cancel;
BottomDialog dialog = new BottomDialog(MainActivity.this,R.layout.input_dialog,views);
dialog.setOnBottomMenuItemClickListener(new BottomDialog.OnBottomMenuItemClickListener() {
                        @Override
                        public void onBottomMenuItemClick(BottomDialog dialog, View view) {
                            switch (view.getId()){
                                case R.id.input_dialog_sure:
                                    EditText editText1 = dialog.getView(R.id.input_dialog_edit);
                                        String content = editText1.getText().toString();
                                        Toast.makeText(MainActivity.this,content,Toast.LENGTH_SHORT).show();

                            }
                        }
                    });
                    dialog.show();

我的布局文件input_dialog.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="vertical"
        android:background="@drawable/dialog_style"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:paddingTop="20dp"
            android:id="@+id/input_dialog_title"
            android:text="提示"
            android:textSize="20sp"
            android:textColor="#444444"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:paddingTop="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingBottom="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/input_dialog_edit"
                android:layout_width="match_parent"
                android:layout_height="40dp" />
        LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#555555" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:textSize="18sp"
                android:text="取消"
                android:textColor="#444444"
                android:gravity="center"
                android:id="@+id/input_dialog_cancel"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="60dp" />

            <View
                android:layout_width="1dp"
                android:layout_height="60dp"
                android:background="#555555" />

            <TextView
                android:textSize="18sp"
                android:text="确定"
                android:textColor="#444444"
                android:gravity="center"
                android:id="@+id/input_dialog_sure"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="60dp" />
        LinearLayout>
    LinearLayout>
LinearLayout>

效果图如下
android 打造可复用的底部dialog_第1张图片

参考博客:http://blog.csdn.net/DickyQie/article/details/75505059

你可能感兴趣的:(android)