Android自定义alertDialog和对话框中的点击事件

需求说明:

在界面底部弹出一个对话框,其中有四个按钮,可分别点击不同的按钮。

界面如下:

Android自定义alertDialog和对话框中的点击事件_第1张图片

布局文件:dialog_menu.xml

我这里其实并不是点击的按钮,点击的是盛放图片和下方文字的Layout,所以要先将RelativeLayout设置

android:clickable="true"




    

        

            

                

                    

                    
                
            

            

                

                    

                    
                
            
        

        

            

                

                    

                    
                
            

            

                

                    

                    
                
            
        
    

MenuDialog的style:res/values/styles.xml





在MainActivity中弹出对话框

因为对话框是在activity上显示的,所以对话框上的按钮不能直接findViewById,这样是找不到的,需先获得dialog的window,再通过window去findViewById

private void showMenuDialog() {
        //dialog 不能用Application的Context
        AlertDialog menuDialog = new AlertDialog.Builder(MainActivity.this, R.style.MenuDialog).create();
        menuDialog.show();
        Window window = menuDialog.getWindow();
        window.setContentView(R.layout.dialog_menu);
        window.setGravity(Gravity.BOTTOM); //设置对话框在界面底部显示
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = config.getScreenWidth();  //设置对话框的宽度为屏幕宽 (此处得到的是我一开始获得并存放起来的屏幕宽)
        window.setAttributes(params);//此句代码一定要放在show()后面,否则不起作用
        menuDialog.setCanceledOnTouchOutside(true);
        rl_explain = (RelativeLayout) window.findViewById(R.id.rl_explain); 
        rl_exit = (RelativeLayout) window.findViewById(R.id.rl_exit);
        rl_light_screen = (RelativeLayout) window.findViewById(R.id.rl_light_screen);
        rl_setting = (RelativeLayout) window.findViewById(R.id.rl_setting);
        rl_explain.setOnClickListener(this);
        rl_light_screen.setOnClickListener(this);
        rl_setting.setOnClickListener(this);
        rl_exit.setOnClickListener(this);
    }
最后具体事件的处理就和activity的onClick事件一样


以上是通过自定义AlertDialog的方式实现的点击对话框内的按钮的。

还可以通过将Activity设置成对话框形式再处理点击事件

布局文件不变。

style也可以不变。

将之前showMenuDialog()的操作放到新的Activity中(MenuDialogActivity.java),就不用再使用AlertDialog了,直接把布局文件setContentView(R.layout.dialog_menu);这样就可以直接findViewById了,因为点击事件都是在一个新的Activity中了。

注意在AndroidManifest.xml中设置该Activity的样式:

 




你可能感兴趣的:(Android)