标签:activity dialog activity触摸外部消失
android自带的dialog样式一般不满足自己的要求,那就要求dialog自定义。
其实,activity也是可以以dialog的形式存在的,我们只需在清单文件中设置其theme属性即可:
<activity
android:name=".EditActivity"
android:theme="@android:style/Theme.Dialog"
>
</activity>
一般的activity形式的dialog,触摸其外部都是会dismiss的,那么,我们如何避免其被dismiss掉呢?
要想实现这一点,其实只需一句代码:
setFinishOnTouchOutside(false)即可,这有点像popupwindow的setOutsideTouchable(false);
要做到按返回键也不消失的话,只需屏蔽返回键或重写backpress方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
////在默认情况下是会调用finish()方法的
///super.onBackPressed();
}
/////这个是activity本来要实现的方法
public void onBackPressed() {
if (!mFragments.popBackStackImmediate()) {
finish();
}
}
这样做还不够,activity以dialog的形式显示,宽度会比较小,这就需要我们自己给定宽度了:
WindowManager manager = getWindowManager();
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = manager.getDefaultDisplay();
display.getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = (int) (width*0.8);
getWindow().setAttributes(params);
这样我们就设置好了activity的宽度了。
标签:activity dialog activity触摸外部消失
原文地址:http://blog.csdn.net/chengjiamei/article/details/45031229