本次主要针对,非全屏的Activity做些了解;
作为初学者,之前接触到的activity大部分情况,都是全屏显示;
想要实现局部窗口的时候,都是采用悬浮窗来替代activity;直到最近才偶然了解到通过Theme.Dialog也能将activity实现局部现实的效果;
1.利用eclipse生成一个helloword的工程;
2.修改res\values\styles.xml如下:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.NotFullActivity" parent="android:style/Theme.Dialog"> <item name="android:windowCloseOnTouchOutside">false</item> <item name="android:windowNoTitle">false</item> <item name="android:windowIsFloating">true</item> </style> </resources>
android:windowCloseOnTouchOutside 点击activity窗口之外时,是否关闭activity;
android:windowNoTitle 是否有标题栏;
android:windowIsFloating 是否悬浮在其他activity之上;这里必须要设置为true,否则activity显示的时候,窗口虽然不是全屏,但是背景窗口任然是全屏的;
3.修改AndroidManifest.xml的主题风格为刚刚自定义的主题
android:theme="@style/Theme.NotFullActivity"
4.MainActivity.java修改窗口的大小
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LayoutParams attributes = getWindow().getAttributes();
attributes.dimAmount = 0.0f; //设置窗口之外部分透明程度 attributes.x = 0; attributes.y = 0; attributes.width = 800; attributes.height = 1024; getWindow().setAttributes(attributes); getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); }
attributes.dimAmount 设置除acitvity之外的窗口,透明程度;
以下是将dimAmount分别设置为:0.0f 和 0.6f的效果对比
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
这个是去掉activity对窗口之外的触摸消息响应(如果不设置此选项,那么如上图当中的:“浏览器”,“短信”都是不能点击的)
5.layout\activity_main.xml 随便加上俩控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入:"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="111"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="222"/> </LinearLayout>
附加几个andoird window属性的解释(没有测试过)转自:http://my.oschina.net/tedyin/blog/178376
<item name="windowBackground"> 窗体的背景 </item> <item name="windowFrame">Dialog 是否有边框 </item> <item name="windowNoTitle">窗体是否有标题</item> <item name="windowFullscreen">false</item> 是否为全屏 <item name="windowOverscan">false</item> 是否要求窗体铺满整屏幕 <item name="windowIsFloating">false</item> 窗体是否浮在下层之上 <item name="windowContentOverlay">@null</item> 设置窗体内容背景 <item name="windowShowWallpaper">false</item> 是否显示壁纸 <item name="windowTitleStyle">@android :style/WindowTitle</item> 窗体的标题栏Style <item name="windowTitleSize">25dip</item> 窗体文字大小 窗体标题栏背景 <item name="windowTitleBackgroundStyle">@android :style/WindowTitleBackground</item> 窗体切换时的动画样式 <item name="android:windowAnimationStyle">@android :style/Animation.Activity</item> 在使用输入法时窗体的适配 <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item> <item name="windowActionBar">false</item> 是否打开ActionBar <item name="windowActionModeOverlay">false</item> 这个暂时不知道,希望大神能回答一下。 <item name="windowCloseOnTouchOutside">false</item> 是否再点击外部可关闭 <item name="android:windowIsTranslucent">false</item> 窗体是否半透明 <item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示 <item name="android:windowContentOverlay">@null</item> 自定义Titlebar时去掉多余的阴影。