如何将TabHost的主题从Holo.Light更改为Dark主题

时间:2013-06-27 06:30:37

标签: android android-tabhost android-dialog android-theme android-holo-everywhere

我一直在尝试更改TabHost的主题。到目前为止,我一直到这里:

Light Tabhost Theme

我通过使用以下xml实现了这一点:

<TabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
android:id="@+id/signupLinearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

    <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="0"
    android:gravity="center"
    android:orientation="horizontal" />

        <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0" >

            <ScrollView
            android:id="@+id/scrollView02"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            </ScrollView>

            <ScrollView
            android:id="@+id/scrollView01"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            </ScrollView>               
        </FrameLayout>
</LinearLayout>

我的MainActivity.java

ContextThemeWrapper wrapper = new ContextThemeWrapper(
ActivityMain.this,
android.R.style.Theme_Holo_Light);

final LayoutInflater inflater = (LayoutInflater) wrapper
    .getSystemService(LAYOUT_INFLATER_SERVICE);                             

dialog = new Dialog(wrapper);
dialog
    .requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog
    .setContentView(R.layout.dialog_layout);

TabHost tabs = (TabHost) dialog
    .findViewById(android.R.id.tabhost);
tabs.setup();
tabs.setCurrentTab(0);

TabSpec tspec1 = tabs.newTabSpec("Tab1");
tspec1.setIndicator("SIGN UP");
tspec1.setContent(R.id.scrollView02);
tabs.addTab(tspec1);

TabSpec tspec2 = tabs.newTabSpec("Tab2");
tspec2.setIndicator("LOG IN");
tspec2.setContent(R.id.scrollView01);
tabs.addTab(tspec2);

当我在视图中使用Dialog类并在对话框中集成TabHost时,这就是为什么我使用ContextThemeWrapper来为{{1}创建一些主题的原因}}

现在,我的问题是如何将Dialog主题更改为Holo.Light主题。这是我想要的图片: Dark theme for tabhost

我知道android目前还没有Dark主题。这仅适用于Holo.Dark。那么我该如何实现这个解决方案。

任何形式的帮助都将受到赞赏。

4 个答案:

答案 0 :(得分:4)

这将有效:

//Changing the tabs background color and text color on the tabs
for(int i=0;i<tabs.getTabWidget().getChildCount();i++) 
{ 
    tabs.getTabWidget().getChildAt(i).setBackgroundColor(Color.BLACK);
    TextView tv = (TextView) tabs.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
                    tv.setTextColor(Color.parseColor("#ffffff"));
} 

对于指标,在tabwidget下面有这样的布局

 <LinearLayout
            android:id="@+id/tab_indicator"
            android:layout_width="fill_parent"
            android:layout_height="5dp"
            android:background="#bdbdbd" >

            <LinearLayout
                android:id="@+id/tab_indicator_left"
                android:layout_width="wrap_content"
                android:layout_height="5dp"
                android:layout_weight="1"
                android:background="#f44b3b" >
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab_indicator_right"
                android:layout_width="wrap_content"
                android:layout_height="5dp"
                android:layout_weight="1"
                android:background="#bdbdbd" >
            </LinearLayout>
        </LinearLayout>

根据标签选择更改指标的背景颜色。

tabindicator1.setBackgroundColor(Color
                            .parseColor("#f44b3b"));

答案 1 :(得分:2)

查看有用的链接 How to change default color to Tab Host

并且也参考这将有用

http://joshclemm.com/blog/?p=136

答案 2 :(得分:1)

我建议尽可能多地使用android的源代码。在我看来,这真的让事情更加清洁。我添加了一个我在下面使用的基本示例。不完美但比其他任何东西更接近我能够比大多数例子更精细和更清洁。 https://github.com/android/platform_frameworks_base/tree/master/core/res/res

例如,对于holo主题,请使用此选项。 https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/tab_indicator_holo.xml 并获取所有资源并将它们放入您的项目中。之后,使用链接 http://joshclemm.com/blog/?p=136 并根据需要修改它。

您的布局文件

<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabHost">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dip"
    android:layout_marginRight="0dip"
    android:background="#000">
</TabWidget>

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

</FrameLayout>

代码 - 与josh clemm相同

        mTabHost=(TabHost)getActivity().findViewById(R.id.tabHost);
    mTabHost.setup();
    //mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

    setupTab(new TextView(getActivity()), "Tab 1");
    setupTab(new TextView(getActivity()), "Tab 2");
    setupTab(new TextView(getActivity()), "Tab 3");


private void setupTab(final View view, final String tag) {
    View tabview = createTabView(mTabHost.getContext(), tag);
    TabHost.TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabHost.TabContentFactory() {
        public View createTabContent(String tag) {return view;}
    });
    mTabHost.addTab(setContent);
}

private static View createTabView(final Context context, final String text) {
    View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
    TextView tv = (TextView) view.findViewById(R.id.tabsText);
    tv.setText(text);
    return view;
}

然后是tab_bg文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/tabsLayout" android:layout_width="fill_parent"
          android:layout_height="fill_parent" android:background="@drawable/tab_selector"
          android:padding="10dip" android:gravity="center" android:orientation="vertical">
<TextView android:id="@+id/tabsText" android:layout_width="wrap_content"
          android:layout_height="wrap_content" android:text="Title"
          android:textSize="15dip" android:textColor="@android:color/white" />
</LinearLayout>

答案 3 :(得分:1)

在res / values / styles.xml中,将主题父级更改为"android:Theme.Holo"而不是"android:Theme.Holo.Light"

这会明显改变整个应用程序的主题,但您也可以为不同的活动使用不同的样式。