美文网首页
Android中弹出框形式的Activity简析

Android中弹出框形式的Activity简析

作者: f44148db1e8c | 来源:发表于2019-05-19 18:34 被阅读0次

    均属于笔记,仅供个人参考,有问题欢迎指正

    一,activity以窗口形式呈现:

    在AndroidManifest.xml中进行一个theme配置:

    如:<activity Android:name=".OtherActivity" android:theme="@android:style/Theme.Dialog"></activity>

    参考:http://blog.csdn.net/xingmeng916/article/details/6857620

    二,Android:将activity设置为弹出式的并设置为透明的

    1. 在res/values 下建立color.xml

      <resources> 

    <color name="transparent_background">#80ffffff</color>

    </resources>

    PS:  #80是透明度的值(即80%透明),ffffff是颜色值(为黑色)

    2. 在res/values下建立style.xml

    <resources>

    <style name="Transparent" parent="android:style/Theme.Dialog">

      <item name="android:windowBackground">@color/transparent_background</item>

      <item name="android:windowNoTitle">true</item>

      <item name="android:windowIsTranslucent">true</item>

      <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>

    </style>

    </resources>

    PS: parent="android:style/Theme.Dialog" 是将activity设置为弹出式窗口

    3. 在AndroidManifest.xml中找到要弹出的activity,加入theme:

    <activity android:name="ActivityName"

      android:theme="@style/Transparent"

      />

    完成上面设置后,你的activity就已经是透明的了,但是该Activity中的控件还没有透明,如果还需要控件透明,则需要在该activity的代码中加入如下代码:

    //设置activity中的控件透明

      Window window = getWindow();

      WindowManager.LayoutParams wl = window.getAttributes();

      wl.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

      wl.alpha=0.95f;//设置透明度,0.0为完全透明,1.0为完全不透明

      window.setAttributes(wl);

    参考:http://blog.csdn.net/chaozhung_no_l/article/details/8900682

    三,对让弹出框消失的处理

    1,自身布局中的控件

    cancel = (Button) findViewById(R.id.cancel);

    cancel.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View arg0) {

    finish();

    }

    });

    }

    对于点击外围和返回键不拦截时,默认的操作就是让弹出框消失。(和自己拦截后调用finish方法的效果相同)

    2,点击外围(判断是否需要拦截,拦截后什么都不做,再消费掉对应的事件即可)

    //当需要是返回键和点击外围失效可以重写onTouchEvent方法,截取返回键点击事件

    //这块可以没有onTouchEvent这个方法,既不需要拦截触摸事件,默认的就是销毁该活动

    @Override

    public boolean onTouchEvent(MotionEvent event)

    {

    finish();

    return true;

    //这块true和false都可以,一个是消费掉事件,一个是不消费交由父控件消费

    // return false;

    }

    3,返回键(判断是否需要拦截,拦截后什么都不做,再消费掉对应的事件即可)

    @Override

    public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_BACK) {

    //拦截了什么都不做

    // finish();

    return true;

    }

    return false;

    }

    四,控制对话框风格的activity的显示大小与位置

    实现对话框风格的activity,我们需要在AndroidManifest.xml添加一句样式声明:

    <activity

      android:name=".product.MyselfPayProduct"

      android:screenOrientation="portrait"

      android:theme="@android:style/Theme.Dialog" >

    不过这样的对话框风格往往无法满足我们的需要,显示的效果不那么令人满意,第一点就是如何控制对话框的大小:

    //窗口对齐屏幕宽度

    Window win = this.getWindow();

    win.getDecorView().setPadding(0, 0, 0, 0);

    WindowManager.LayoutParams lp = win.getAttributes();

    lp.width = WindowManager.LayoutParams.MATCH_PARENT;

    lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

    lp.gravity = Gravity.TOP;//设置对话框置顶显示

    win.setAttributes(lp);

    将这个控制语句添加在我们的对话框activity的onCreate()方法中,这样我们的对话框就可以宽度与屏幕一样宽了,lp.gravity = Gravity.TOP;//设置对话框置顶显示,android默认对话框居中显示,我们可以通过这句代码设置对话框的显示位置。

    Window win = this.getWindow();

    win.getDecorView().setPadding(0, 0, 0, 0);

    WindowManager.LayoutParams lp = win.getAttributes();

    lp.width = WindowManager.LayoutParams.MATCH_PARENT;

    lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

    lp.gravity = Gravity.BOTTOM;

    win.setAttributes(lp);

    // 这里是设置偏移量,这里的x,y并不是相对于屏幕的绝对坐标,而是相对于对话框在中心位置(默认的对话框一般显示在屏幕的中心)而言的 

    // lp.x = -20;// 设置水平偏移量 

    // lp.y = 180;// 设置竖直偏移量 

    // WindowManager.LayoutParams lp = getWindow().getAttributes(); 

    //     lp.width = LayoutParams.FILL_PARENT; 

    //     lp.gravity = Gravity.BOTTOM; 

    //     getWindow().setAttributes(lp); 

    参考:http://blog.csdn.net/fengqiaoyebo2008/article/details/5907373

    http://www.cnblogs.com/AndroidJotting/p/4768849.html

    相关文章

      网友评论

          本文标题:Android中弹出框形式的Activity简析

          本文链接:https://www.haomeiwen.com/subject/ecbqzqtx.html