自定义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的宽度了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

释汐宇辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值