web-dev-qa-db-ja.com

TabWidgetの現在のタブの最終行の色

stripLeftstripRightを有効にして設定したTabWidgetがあります...

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

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

enter image description here

現在選択されているタブの一番下の行の色を変更するにはどうすればよいですか? (青い色がstyles.xmlのデフォルトのAppThemeスタイルに設定されていると思います。)

私は this answerを見ましたが、色を変える方法を言っていません...

62
neo108

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

<!-- 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);
}

バックグラウンドセレクタを使用して独自の顧客インジケータレイアウトを設定することにより、これを行う簡単な方法があるかもしれませんが、これは私にとって最も簡単に機能したものです。

75
Michael Celey

この目的で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" />
14
Nidhi

これがタブの変更方法です。

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

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

12
Basim Sherif

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

ジェフ・ギルフェルトに感謝


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

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

10
Ash

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

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

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

5
Alexey O.

アクセント色はデフォルトでアクティブなタブの色として使用されます。 style.xmlファイルで設定/変更できます:

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

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

</style>
4
dzikovskyy

この問題を解決する私の方法は、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" />
2
Ted_Liang

私は他の解決策を見つけました-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>
0
skajar