64

有効にして設定したTabWidgetがstripLeftありstripRightます...

mTabHost.getTabWidget().setStripEnabled(true);
mTabHost.getTabWidget().setRightStripDrawable(R.drawable.redline);
mTabHost.getTabWidget().setLeftStripDrawable(R.drawable.redline);

下の画像でわかるように、これは現在選択されているタブ(TAB 2)の一番下の線の色を変更しません。

ここに画像の説明を入力してください

現在選択されているタブの最終的な色を変更するにはどうすればよいですか?現時点ではデフォルトで青になっていますか?(青い色はのデフォルトAppThemeスタイルに設定されていると思いますstyles.xml。)

私はこの答えを見ましたが、色を変える方法を教えていません...

4

9 に答える 9

77

タブインジケーターの色は、ここにあるセレクタードローアブルによって設定されており、次のようになります。

<!-- AOSP copyright notice can be found at the above link -->
<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="@drawable/tab_unselected_holo" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />

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

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

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

セレクターが使用するドローアブルはすべて、その水色で色付けされています。これらのドローアブルを独自の色を変更したバージョンに置き換えることができます。オリジナルは次のようになります(オリジナルは小さく、リンクが含まれています):

上記のセレクターをドローアブルと一緒に独自のプロジェクトにコピーすることをお勧めします。次に、ドローアブルの色を希望の色に変更します。次に、セレクターをタブインジケーターの背景として設定します。あなたはこのようにそれをすることができます(あなたのタブを設定した後):

TabHost host = (TabHost)view.findViewById(R.id.tab_host);
TabWidget widget = host.getTabWidget();
for(int i = 0; i < widget.getChildCount(); i++) {
    View v = widget.getChildAt(i);

    // Look for the title view to ensure this is an indicator and not a divider.
    TextView tv = (TextView)v.findViewById(android.R.id.title);
    if(tv == null) {
        continue;
    }
    v.setBackgroundResource(R.drawable.your_tab_selector_drawable);
}

背景セレクターを使用して独自の顧客インジケーターのレイアウトを設定することで、これを行う簡単な方法があるかもしれませんが、これが私にとって最も簡単な方法です。

于 2013-04-01T19:44:36.683 に答える
25

この目的のためにapp:tabIndicatorColorを使用できます。必要に応じて、選択したタブインジケーターの線の色が変わります。

<android.support.design.widget.TabLayout
                    android:id="@+id/tabs"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:tabIndicatorColor="@android:color/white"
                    app:tabMode="fixed" />
于 2016-06-24T06:55:47.610 に答える
12

これが私のタブを変更した方法です、

private void changetabs(TabWidget tabWidget) {
    // Change background
    for(int i=0; i < tabWidget.getChildCount(); i++)
        tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_selector);
}

と私のtab_selector.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="@drawable/tab_unselected_holo" />
<item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />

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

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

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

それが誰かを助けることを願っています。

于 2013-08-01T11:05:24.663 に答える
10

誰かがそれにつまずいた場合に備えて、タブのドローアブル(9パッチ)をすばやく作成するためのオンラインツールがあります。色を選択してボタンを押すだけです。

ジェフ・ギルフェルトに感謝します


Androidアクションバースタイルジェネレーターを使用すると、Androidアプリケーション用のシンプルで魅力的でシームレスなカスタムアクションバースタイルを簡単に作成できます。必要な9つのパッチアセットすべてに加えて、プロジェクトに直接コピーできる関連するXMLドローアブルとスタイルが生成されます。

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

于 2014-06-18T10:11:59.677 に答える
6

フィルタを使用できます。
これは、透明でない領域に適用されます

tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);

1行のコード-状態を変更する必要はありません。

于 2015-06-22T20:31:55.093 に答える
5

アクセントカラーは、デフォルトでアクティブなタブカラーとして使用されます。あなたはそれをファイルで設定/変更することができstyle.xmlます:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">

    <item name="colorAccent">@color/myAccentColor</item>

</style>
于 2015-10-26T15:55:32.917 に答える
2

この問題を解決する私の方法は、setBackgroundResourceを使用することです。まず、まったく同じ背景を作成する必要があります

line_label_1_pressed.xml

<item android:top="-6dp" android:left="-6dp" android:right="-6dp">
    <shape>
        <size android:height="50dp"/>
        <solid android:color="@android:color/transparent"/>
        <stroke android:color="@color/myColor" android:width="6dp"/>
    </shape>
</item>

line_label_1.xml

<item>
    <shape>
        <solid android:color="@android:color/transparent" />
    </shape>
</item>

次に、次のようにtab_selector.xmlを作成します

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/line_label_1_pressed" android:state_selected="true"/>
<item android:drawable="@drawable/line_label_1"/>

次に、tab_selector.xmlを使用してsetbackgroudResource

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/tab_selector"
android:gravity="center_horizontal|center_vertical" />
于 2014-02-10T14:29:14.310 に答える
0

他の解決策を見つけました。styles.xmlを開き、1行変更します。

res->値->styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@android:color/holo_orange_light</item> <!-- set the color in this line -->
    <item name="windowNoTitle">true</item>
</style>

于 2017-09-20T18:12:53.317 に答える
-2

次のようなものを使用してください

tabHost.setSelectedTabIndicatorColor(Color.WHITE);
于 2015-10-01T13:27:26.853 に答える