1

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

轻标签主机主题

我通过使用以下 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它在Dialog.

现在,我的问题是如何将主题更改Holo.LightDark主题。这是我想要的图片: tabhost 的深色主题

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

任何形式的帮助将不胜感激。

4

4 回答 4

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"));
于 2013-06-27T07:13:22.637 回答
2

请参阅将有帮助的链接 如何将默认颜色更改为选项卡主机

并参考这将有帮助

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

于 2013-06-27T07:31:30.033 回答
1

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

例如,对于全息主题,使用它。 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>
于 2014-02-21T21:53:01.200 回答
1

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

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

于 2015-05-25T17:57:46.080 回答