Android自定义Dialog的一些问题
2016-02-28 00:37
696 查看
Android自定义Dialog的一些问题
怎样自定义Dialog
Android自带的Dialog不管是样式还是功能都比较普通。如果有比较特殊的需求,比如自定义的布局、不需要标题栏、不需要按钮以及多个dialog页面切换,就需要自定义Dialog。自定义Dialog一般是对Dialog的重写,比如继承一个AlertDialog类。然后重写onCreate方法,把自定义的布局加进去即可,同时设置布局元素的事件响应。
dialog在onCreate方法中设置不显示标题栏:
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
一般自定义dialog的事件响应都会给Activity一个回调:
[code]package com.demo; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class LeaveMeetingDialog extends Dialog implements OnClickListener{ private Button quitBtn,stopBtn,cancelBtn; private LeaveMeetingDialogListener listener; public interface LeaveMeetingDialogListener{ public void onClick(View view); } public LeaveMeetingDialog(Context context,int theme,LeaveMeetingDialogListener listener) { super(context,theme); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.leave_meeting_dialog); initViews(); } private void initViews(){ quitBtn = (Button)findViewById(R.id.quit_btn); stopBtn = (Button)findViewById(R.id.stop_btn); cancelBtn = (Button)findViewById(R.id.cancel_btn); quitBtn.setOnClickListener(this); stopBtn.setOnClickListener(this); cancelBtn.setOnClickListener(this); } @Override public void onClick(View v) { listener.onClick(v); } } ---调用处: [java] LeaveMeetingDialog dialog = new LeaveMeetingDialog(this,R.style.Theme_CustomDialog, new LeaveMeetingDialogListener() { @Override public void onClick(View view) { switch(view.getId()){ case R.id.quit_btn:break; case R.id.stop_btn:break; case R.id.cancel_btn:break; } } }); dialog.show();
代码来源:http://www.cnblogs.com/rainly/p/3435110.html
自定义Dialog一些特殊设置
平常设置AlertDialog一些功能,比如点击外部区域Dialog不消失、点击返回键也不消失等,都是通过AlertDialog的Builder来完成。自定义Dialog如果继承自AlertDialog,按理说也可以以这样的方式:[code]builder.setTitle(getText(R.string.XXXX)) .setMessage(getText(R.XXXXXX)) .setOnKeyListener(key)//返回键监听器 .setCancelable(false)//设置点击外部区域dialog不消失 .setPositiveButton(android.R.string.ok, someOKButtonListener) .setNegativeButton(android.R.string.cancel, null); OnKeyListener keylistener = new DialogInterface.OnKeyListener(){ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0) { return true;//返回true会截断返回键的点击事件,不做其他处理 } else { return false; } } } ;
代码来源:http://www.apkbus.com/android-114253-1-1.html
但是实际上没有作用。而是应该设置:
[code]dialog.setCancelable(false); dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0) { return true; } else { return false; } } });
背景虚化
Android在API 14以后不再支持Dialog背景虚化。参见下面的代码没有作用。
[code]setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
而
[code]WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); lp.dimAmount = 0.55f; //0f背景亮度不变,1f背景变黑 dialog.getWindow().setAttributes(lp); dialog.getWindow() .addFlags(WindowManager.LayoutParams.FLAGDIMBEHIND);
只是实现背景亮度改变。
相关文章推荐
- android同时打开多个Activity的方式(应用于启动页面广告等场景)
- 简易的按钮事件(Button的4中事件处理)
- android framework初步理解
- Android系统之G-sersor调试
- android-tip-关于SpannableString的使用
- Android中EditText的字数统计
- Mac下配置android环境变量
- 4.4.1 Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android 返回桌面的操作
- Android 富文本编辑器 图文混排
- Android系统启动时添加运行脚本
- Android控件默认颜色与背景颜色相同导致显示问题
- Android按键映射
- android studio gradle 多版本多apk打包(打包系列教程之五)
- Android系统之G-sensor
- android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
- Android数据库更新并保留原来数据的实现
- Android学习笔记之Service
- android 群英传 的刮刮卡demo 心得
- Error: Error parsing D:\Android\sdk\system-images\android-23\android-wear\x86\devices.xml