关于dialog遇到的问题
我们都知道弹窗dialog所需要传入的上下文必须是Activity对象,其实现在也有全局的dialog,但是需要权限

    

但是经测试在小米6.0上,这个权限是默认关闭的,当然6.0以上,Android涉及到危险权限和普通权限,危险权限不仅仅要再清单文件中声明,在页面涉及到该权限的时候,会弹出系统提示框来提示用户,当然我们一般会自定义弹窗,因为仅仅依赖系统的权限弹窗提示是不行的,因为用户可能点击了拒绝并且不再提醒,这里运行时权限可以考虑使用鸿洋大神的 eastPermission 或者XPermission,在用户拒绝之后,弹出提示,进入到设置界面,用法非常简单,今天的主题不是这个就不再说了,今天的主题是用另外一种思路来实现弹窗

使用弹窗样式的Activity来代替dialog

跟刚才说的一样,dialog上有edittext,会导致软键盘挡住弹窗,网上很多解决办法都试过了,没用,后来想到最简单的方法就是用一个弹窗样式的Activity来代替dialog,

    

清单文件

        

DialogActivity

public class DialogAty extends Activity {@BindView(R.id.et_password)EditText mEtPassword;@BindView(R.id.btn_cancel)Button mBtnCancel;@BindView(R.id.btn_confirm)Button mBtnConfirm;@BindView(R.id.ll_btns)AutoRelativeLayout mLlBtns;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_dialog_aty);    //点击外部,消失    this.setFinishOnTouchOutside(false);    // Make us non-modal, so that others can receive touch events.    getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);    // ...but notify us that it happened.    getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);    ButterKnife.bind(this);}@OnClick({R.id.btn_cancel, R.id.btn_confirm})public void onViewClicked(View view) {    switch (view.getId()) {        case R.id.btn_cancel:            finish();            break;        case R.id.btn_confirm:            startActivity(new Intent(Utils.getContext(), AlarmSettingActivity.class));           // mEtPassword.getText().toString();            finish();            break;    }}@Overridepublic boolean onTouchEvent(MotionEvent event) {    // If we've received a touch notification that the user has touched    // outside the app, finish the activity.    if (MotionEvent.ACTION_OUTSIDE == event.getAction()) {        //finish();        //点击外部,软键盘消失        KeyBoardUtils.hideInputForce(this);        return true;    }    // Delegate everything else to Activity.    return super.onTouchEvent(event);}

}

xml

<?xml version="1.0" encoding="utf-8"?>

效果图

遇到的小bug

问题

中间遇到一个小插曲,就是在vivo手机上,打开这个弹窗的Activity,直接透明看到了桌面,在其他手机上没有问题

解决

从网上找了很久资料都没找到,启动模式设置为singleInstance也没用
后来找到了问题所在,是因为我用了滑动返回,所以我要把所以Activity的样式都是设置为透明的,然后每个aty布局中写背景颜色,但是偏偏在vivo(其他手机有没有该问题不知道),只要涉及到透明和透明度,看到的不是下面一个Activity,而是直接透明看到桌面,反正我试了在小米6.0和华为7.0都没问题,在vivo5.1上有这个问题,导致我的弹窗Activity一打开,弹窗以外都变透明了
后来的解决办法:把弹窗类型的Activity的上一个页面,也就是任务栈的上一个Activity,背景设置为不透明的,就ok了
工作仓促,暂时记一下,以后完善

更多相关文章

  1. android 属性系统,SystemProperties 的简介---转载
  2. Android客户端请求服务端资源(HttpURLConnection和输入流实现)
  3. Android中显示GIF动画的实现代码
  4. Android下写一个永远不会被KILL掉的进程/服务
  5. 听说谷歌Baba更新了 Material UI ...
  6. Android中CMake的使用之三调用第三方库
  7. Android(安卓)Studio 中手把手教你设置switch/case代码块自动补
  8. flex兼容 iOS和Android样式兼容 【微信小程序】
  9. Android权限设置引导

随机推荐

  1. Android的Window类
  2. Android官方入门文档
  3. Evernote Android(安卓)最新版加入手寫記
  4. Android的崛起和面临的困境
  5. Android处理输入事件的流程(一)
  6. 开发者如何看待移动平台之争
  7. Android(安卓)无线调试
  8. Android的消息机制
  9. android:屏蔽按键进入安全模式
  10. Android中的时间时区自动更新