背景
如果前景活动的主题根据其是对话,则绘制后面 ;否则,android操作系统将不会绘制它后面的内容(可能是为了节省内存,因为它通常不会被看到)。Activity
Acivity
AndroidManifest.xml
Activity
为了利用这一点,我们将主题设置为清单中的对话,使android操作系统绘制其背后的内容,但后来,以编程方式将我们的主题设置为我们在运行时喜欢的任何内容。Acitvity
Activity
Activity
我做了一个例子,把它放在github上。
教程
步骤 1:在 中为应用程序创建两个自定义主题。一个用于正常活动,另一个用于对话活动。自定义对话主题必须从也是对话的基本主题继承。在我的情况下,父主题是 )。这是我的:styles.xml
Base.Theme.AppCompat.Light.Dialog.FixedSize
styles.xml
<resources>
<!-- custom normal activity theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<!-- custom dialog activity theme -->
<style name="AppTheme.Dialog" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize">
<!-- removing the dialog's action bar -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
步骤2:在 中,将有问题的主题设置为任何对话主题。这使得android操作系统认为这是一个对话框,因此它会将其绘制在后面,而不会将其涂黑。在我的情况下,我使用了.以下是我的:AndroidManifest.xml
Activity
Activity
Activity
Theme.AppCompat.Dialog
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eric.questiondialog_artifact">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".DialogActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Dialog"> <-- IMPORTANT!!! -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
步骤3:在实际活动中,将主题编程设置为正常活动的主题或对话的主题。我的在下面:DialogActivity.java
package com.example.eric.questiondialog_artifact;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class DialogActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setTheme(R.style.AppTheme_Dialog); // can either use R.style.AppTheme_Dialog or R.style.AppTheme as deined in styles.xml
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}