0

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

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"

样式_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>

我检查了这个文件,在我看来一切都很好。有什么问题?

4

2 回答 2

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"/>

于 2013-10-28T14:47:02.137 回答
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> 
于 2013-10-25T11:41:31.140 回答