【问题标题】:Android - Specifying custom theme for custom dialog AlertDialog.Builder wraps content within a dialogAndroid - 为自定义对话框指定自定义主题 AlertDialog.Builder 将内容包装在对话框中
【发布时间】:2025-11-28 19:45:02
【问题描述】:

我创建了一个继承自“Theme.Holo.Light.Dialog”的自定义主题。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="cust_dialog" parent="@android:style/Theme.Holo.Light.Dialog"> 
</style>
</resources>

我的代码:

private AlertDialog testDialog;
AlertDialog.Builder testBuilder;
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.test_dialog,
                                   (ViewGroup) findViewById(R.id.test_root));
testBuilder = new AlertDialog.Builder(this, R.style.cust_dialog);
testBuilder.setView(layout);
testBuilder.setTitle("Support");
testDialog = testBuilder.create();
testDialog.show();

这会导致我的对话框在一个对话框中。我该如何解决这个问题?

谢谢。

编辑::::

这是我的 test_dialog.xml 布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/test_root"
          android:orientation="horizontal"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          >


        <Button
            android:id="@+id/test1"
            android:layout_width="300dp"
            android:layout_height="75dp" 
            android:text="@string/test"

            android:gravity="center" />

        <Button
            android:id="@+id/test2"
            android:layout_width="300dp"
            android:layout_height="75dp" 
            android:text="@string/test"
            android:layout_below="@id/test1"
            android:gravity="center" />

</RelativeLayout>

【问题讨论】:

  • 也许您的R.layout.test_dialog 不仅仅包含内容? setView():“将自定义视图设置为对话框的内容”。如果你在那里添加一个完整的对话框布局,你最终会在一个对话框中得到一个对话框。
  • 我已经添加了我的 test_dialog 布局 xml。除了两个按钮,我什么都没有。
  • 应该是你在inflating时指定的根元素引起的。尝试仅使用 View layout = inflater.inflate(R.layout.test_dialog,null); 否则您会将布局膨胀到自身中。
  • 不,这行不通。仍在对话框中显示对话框。

标签: android dialog android-alertdialog


【解决方案1】:

试试这个。

ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.MyTheme );
            AlertDialog.Builder builder= new AlertDialog.Builder( ctw );
            LayoutInflater inflater = (LayoutInflater) ctw.getSystemService(LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.customdialogue,
                                           (ViewGroup) findViewById(R.id.layout_root));

【讨论】:

  • ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.MyTheme ); AlertDialog.Builder builder= new AlertDialog.Builder( ctw ); 为我解决了这个问题。
【解决方案2】:

不是通过通常的上下文,而是通过上下文包装器的上下文来获取布局的 Inflater 非常重要......在这一点上也有点挣扎

【讨论】:

    【解决方案3】:

    你可以试试这个

    AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.layout.test_dialog);
    

    【讨论】:

      最近更新 更多