AlertDialog 中的 TabHost

TabHost inside a AlertDialog

使用 this answer,我设法在 AlertDialog 中获得了 TabHost。

问题是标签指示器的颜色与背景颜色相同,如下图所示:

用于显示对话框的代码如下所示:

        AlertDialog.Builder builder;
        AlertDialog alertDialog;

        LayoutInflater inflater = (LayoutInflater)
                getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.tabbed_dialog,
                (ViewGroup) findViewById(R.id.tabhost));

        TabHost tabs = (TabHost) layout.findViewById(R.id.tabhost);
        tabs.setup();
        TabHost.TabSpec tabpage1 = tabs.newTabSpec("foo");
        tabpage1.setContent(R.id.ScrollView01);
        tabpage1.setIndicator("foo");
        TabHost.TabSpec tabpage2 = tabs.newTabSpec("bar");
        tabpage2.setContent(R.id.ScrollView02);
        tabpage2.setIndicator("bar");
        tabs.addTab(tabpage1);
        tabs.addTab(tabpage2);

        builder = new AlertDialog.Builder(MainActivity.this);

        builder
                .setCancelable(false)
                .setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {

                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
        builder.setTitle("Dialog with tabs");
        builder.setView(layout);
        alertDialog = builder.create();
        alertDialog.show();

这是使用的布局:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="5dp">

            <ScrollView android:id="@+id/ScrollView01"
                android:layout_width="wrap_content"
                android:layout_height="200px">

                <TextView
                    android:id="@+id/TextView01"
                    android:text="foo text content"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:paddingLeft="15dip"
                    android:paddingTop="15dip"
                    android:paddingRight="20dip"
                    android:paddingBottom="15dip"
                    android:textColor="#000000"/>

            </ScrollView>


            <ScrollView android:id="@+id/ScrollView02"
                android:layout_width="wrap_content"
                android:layout_height="200px">

                <TextView
                    android:id="@+id/TextView02"
                    android:text="bar text content"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:paddingLeft="15dip"
                    android:paddingTop="15dip"
                    android:paddingRight="20dip"
                    android:paddingBottom="15dip"
                    android:textColor="#000000"/>

            </ScrollView>
        </FrameLayout>
    </LinearLayout>
</TabHost>

问题是:如何更改指示器颜色?

我知道我可以更改 AlertDialog 使用的布局,如:

builder = new AlertDialog.Builder(MainActivity.this, android.R.style.Theme_Dialog);

但我想要与图片中显示的布局相同,但标签指示器的颜色不同。我可以从 Android 获得这个而不必重新定义整个指标吗?

找到解决方案。
只需获取标题视图并设置颜色:

        TextView tv = (TextView)layout.findViewById(android.R.id.title);
        tv.setTextColor(Color.GRAY);

或者,更好的是,我们可以 select 每个选项卡:

        TextView tv;
        tv = (TextView)tabs.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
        tv.setTextColor(Color.GRAY);
        tv = (TextView)tabs.getTabWidget().getChildAt(1).findViewById(android.R.id.title);
        tv.setTextColor(Color.GRAY);