主题不影响标签

时间:2013-10-25 11:00:52

标签: java android android-theme

我使用此操作栏样式生成器为我的应用程序创建了一个主题。

http://jgilfelt.github.io/android-actionbarstylegenerator/

我已将标签颜色设置为橙色,但它不影响我的布局中的标签。

我的布局如下所示。

<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@android:id/tabhost" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:orientation="horizontal" />

        <FrameLayout
            android:id="@+id/tabFrameLayout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</android.support.v4.app.FragmentTabHost>

以下是我的样式文件和清单文件中的其他内容。

清单文件

android:theme="@style/Theme.Silence"

styles_silence.xml

<style name="Theme.Silence" parent="android:Theme.Holo.Light">
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle.Silence</item>
    ...
</style>
...
<style name="ActionBarTabStyle.Silence" parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
    <item name="android:background">@drawable/tab_indicator_ab_silence</item>
</style>

tab_indicator_ab_silence.xml(这是我之前链接的程序生成的)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Non focused states -->
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_silence" />

    <!-- Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_silence" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_silence" />

    <!-- Pressed -->
    <!--    Non focused states -->
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_silence" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_silence" />

    <!--    Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_silence" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_silence" />
</selector>

我查了this document,在我看来一切都还好。可能有什么不对?

2 个答案:

答案 0 :(得分:4)

  

可能出现什么问题?

该工具为ActionBar中显示的标签生成样式,但您使用的是常规标签(通过标准TabWidget),这些标签具有与之关联的不同样式。该样式在主题中由tabWidgetStyle属性表示,该属性指向样式Widget.(Holo).TabWidget样式。

不幸的是,通过主题的Widget.TabWidget样式,您无法更改背景(并且标签布局既不是隐藏管理此属性的属性),也可以通过指定新布局来手动完成。选项卡指示器并将选择器放在那里:

fragmentTabHost.addTab(fragmentTabHost.newTabSpec("tabText").setIndicator(buildTabLayout("tabText")), YourFragmentClass.class, null);

其中buildTabLayout()是这样的方法:

private View buildTabLayout(String tag) {
    View tab = getLayoutInflater().inflate(R.layout.new_tab_layout, null);      
    return tab;
}

布局是:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/tab_indicator_ab_silence" // or you could have a style attribute
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" android:text="simple"/>

答案 1 :(得分:1)

复制粘贴以下res / values-v14 / styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
    Base application theme for API 14+. This theme completely replaces
    AppBaseTheme from BOTH res/values/styles.xml and
    res/values-v11/styles.xml on API 14+ devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
        <item name="android:actionBarStyle">@style/MyActionBar</item><!-- your theme name -->
        <item name="android:actionBarDivider">@null</item>
    </style>

    <!-- style for the action bar backgrounds -->
    <style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:backgroundStacked">@drawable/tab_bar_bg</item> <!-- change your image -->
        <item name="android:titleTextStyle">@style/MyActionBar.Text</item> <!-- to cusomize the font style on tab bar --.
    </style>

    <style name="MyActionBar.Text" parent="@android:style/TextAppearance">
        <item name="android:textColor">#A3A3A3</item>
        <item name="android:textSize">15sp</item>
    </style>

</resources>

在AndroidManifest.xml中将默认主题更改为主题

    <application
       android:theme="@style/AppTheme" >
       ----
       ----
    </application>