以编程方式将 AppCompatActivity 显示为对话框

Show AppCompatActivity as dialog programmatically

我想在我的设备是平板电脑时显示 Activity(使用 AppCompat)作为对话框。

这是我的 MyAppCompatActivity

主题
<style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="windowNoTitle">true</item>
</style>

当我像这样将这个主题直接放入 Manifest.xml 时,效果很好:

<activity android:name=".MyAppCompatActivity" android:theme="@style/AppDialogTheme"/>

但是当我想以编程方式设置我的主题时,我的 Activity 显示为对话框,但背景覆盖是黑色的(并且不像第一种方法那样透明)。这是我的代码:

public abstract class MyAppCompatActivity extends AppCompatActivity 
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
         if(isTablet)
         {
             setTheme(R.style.AppDialogTheme);
         }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);
    }
}

尝试使用以下代码更改背景颜色:

<style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="windowNoTitle">true</item>
    <item name="android:background">#FF0000</item> //Your custom background color
</style>

当然,您可以像这样从您的自定义 my_layout 更改背景颜色:

android:background="#FF0000"

你是对的,根据Android Developers,似乎那个对话框出现了黑暗 color.But 文档,如果您在 large screens 上使用,则必须在 Manifest 中添加:

<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >

AppCompat:

Theme.AppCompat.Light.DialogWhenLarge
// or
Theme.AppCompat.DialogWhenLarge

还有其他东西,请查看来自 Android 开发人员的 link:

http://developer.android.com/reference/android/app/Dialog.html

内容如下:

Public Constructors

Dialog(Context context) Creates a dialog window that uses the default dialog theme. Dialog(Context context, int themeResId) Creates a dialog window that uses a custom dialog style.

老实说,我在那里找不到 DialogssetTheme 之类的任何方法。(我不太确定,但不存在)。


我正在考虑您的实施方式,我认为这不是创建 dialog 的好方法。检查并尝试以下代码来创建Dialog:

public class MyAppCompatActivity extends Dialog

代替您的代码:

public abstract class MyAppCompatActivity extends AppCompatActivity 

我认为你这样做的方式不对,比如 Activity。检查以下 link 以创建 dialog

How to create a Custom Dialog box in android?