今天写Android程序的时候碰到的一个问题。记录一下。
在程序中我需要从Activity A启动Activity B。我原来想把Activity B设置一个固定的大小,不占满屏幕,
这样我启动Activity B以后还可以保持Activity A处于pause状态,而不进入stop状态。
但是实际运行的时候,无论我怎么设置宽度和高度,Activity B都会占满整个屏幕,从而导致Activity调用onStop。
经过试验,可行的一个办法是把Activity B的主题(Theme)设为@android:style/Theme.Dialog。然后在程序里设定
Acitvity的对齐方式等
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.BOTTOM; getWindow().setAttributes(lp); }
当然,也可以在xml里面通过指定layout_graivity的方式来定位Activity窗口。
在Theme.Dialog主题下,lp.width设为WRAP_CONTENT才起作用,窗口会按照实际内容来设定宽度。
最终的效果如下
Android自带了很多预设的主题,我们可以在这些主题的基础上进行修改,以生成我们自己的主题风格
比如在values/styles.xml文件里,可以这样定义自己的主题
<style name="Theme2" parent="android:Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
Android自带的主题风格有
android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏
android:theme="@android:style/Theme.Light ": 背景为白色
android:theme="@android:style/Theme.Light.NoTitleBar" : 白色背景并无标题栏
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" : 白色背景,无标题栏,全屏
android:theme="@android:style/Theme.Black" : 背景黑色
android:theme="@android:style/Theme.Black.NoTitleBar" : 黑色背景并无标题栏
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,无标题栏,全屏
android:theme="@android:style/Theme.Wallpaper" : 用系统桌面为应用程序背景
android:theme="@android:style/Theme.Wallpaper.NoTitleBar" : 用系统桌面为应用程序背景,且无标题栏
android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系统桌面为应用程序背景,无标题栏,全屏
android:theme="@android:style/Theme.Translucent : 透明背景
android:theme="@android:style/Theme.Translucent.NoTitleBar" : 透明背景并无标题
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并无标题,全屏
android:theme="@android:style/Theme.Panel ": 面板风格显示
android:theme="@android:style/Theme.Light.Panel" : 平板风格显示