美文网首页
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