web-dev-qa-db-ja.com

SlidingTabLayoutのテキストの色を変更するには?

ActionBarCompatを使用するアプリケーションを作成しました

SlidingTabLayoutクラスを使用してタブを作成しました。

クラスはこれです:

SlidingTabLayout.Java

しかし、タブの色は変更できません...

私のviewpagerフラグメントはこれです:

<swmovil.fyb.SlidingTabLayout
    Android:id="@+id/mTabs"
    Android:layout_width="match_parent"
    Android:layout_height="48dip" />

<Android.support.v4.view.ViewPager
    Android:id="@+id/mPager"
    Android:layout_width="match_parent"
    Android:layout_height="0px"
    Android:layout_weight="1"
    Android:background="@color/white" />

アプリケーションはうまく動作しますが、タブのcolor textを変更できません...

次の例を見て、アプリケーションを作成しました。

rudsonlive/Navigation-Drawer-ViewPager-ActionBarCompat

タブのテキストの色を変更するにはどうすればよいですか?

ありがとう!!!

25
seba123neo

1)まず、resの下にカラーフォルダーを作成します(/ res/color)
2)/ res/colorフォルダーの下にxmlファイルselector.xmlを作成します

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:color="@Android:color/white" />
<item Android:state_focused="true" Android:color="@Android:color/white" />
<item Android:state_pressed="true" Android:color="@Android:color/white" />
<item Android:color="#504f4f" /> 
</selector> 

3)次に、SlidingTabLayoutのpopulateTabStrip()メソッドにこれを入れます

tabTitleView.setTextColor(getResources().getColorStateList(R.color.selector));

今、あなたはセレクターを持っています、そしてあなたはあなたが望むどんなイベントでもテキストの色を変えることができます

それが機能しない場合は、次のコード行を追加します。
a)最後に、populateTabStrip()メソッドでこれを追加します

if (i == mViewPager.getCurrentItem()) {
    tabView.setSelected(true);
}

およびb)onPageSelected()メソッドをこれに変更します

    @Override
    public void onPageSelected(int position) {
        if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
            mTabStrip.onViewPagerPageChanged(position, 0f);
            scrollToTab(position, 0);
        }
        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
            mTabStrip.getChildAt(i).setSelected(position == i);
        }
        if (mViewPagerPageChangeListener != null) {
            mViewPagerPageChangeListener.onPageSelected(position);
        }
    }    
45

ファイル_SlidingTabLayout.Java_(Google IOのデフォルトのファイル)を開き、関数populateTabStrip()を見つけてから、このコードの後に

_mTabStrip.addView(tabView);
        if (i == mViewPager.getCurrentItem()) {
            tabView.setSelected(true);
        }
_

次の行を追加します。

_int color = ContextCompat.getColor(tabView.getContext(), R.color.grey);
tabTitleView.setTextColor(color);
_

_R.color.grey_を好みの色に置き換えます。

14
TheOddAbhi

クラスが使用しているTextViewを確認できるはずです。

tabTitleView.setTextColor(getResources().getColor(R.color.white));

私のクラスでは、TextViewはtabTitleViewでした。 Googleが提供するデフォルトの例を使用している場合は、populateTabStrip関数の下にあります。

4
MrLithid

スライドタブレイアウトとスライドタブストリップのコードをコピーしてJavaファイルに配置します。次に、レイアウトフォルダーにcustomtab_title.xmlを作成し、ドローアブルフォルダーにselector.xmlファイルを作成します。`

<?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
           Android:layout_width="match_parent"
           Android:layout_height="wrap_content"
           Android:orientation="horizontal"
           Android:padding="10dp"
   >


<TextView
    Android:id="@+id/textView2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="New Text"
    Android:textColor="@drawable/slidingtab_title_color"/>


</LinearLayout>

selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true" Android:color="@color/unpressed" />
    <item Android:state_focused="true" Android:color="@color/unpressed" />
    <item Android:state_pressed="true" Android:color="@color/unpressed" />
    <item Android:color="@Android:color/black" />
</selector> 

そして、メインアクティビティまたはタブを表示する場所にコードを1行追加します-tabs.setCustomTabView(R.layout.customtab_title、R.id.textView2);

ここでタブはスライディングタブレイアウトタブです。

インジケーターの色を変更するにはadd-tabs.setSelectedIndicatorColors(getResources()。getColor(R.color.unpressed));

4
Aman Verma
   @Override
    public void onPageSelected(int position) {

for (int i = 0; i < mTabStrip.getChildCount(); i++) {

  TextView tv = (TextView) mTabStrip.getChildAt(i);
 if (i==position)
  tv.setTextColor(getResources().getColorStateList(R.color.white));
 else                             
  tv.setTextColor(getResources().getColorStateList(R.color.tab_text_color));

        }

これはあなたを助けるかもしれません

2
Vinod Ranga

残念ながら、このクラスはコードを編集せずにタブのテキストの色をカスタマイズすることをサポートせず、常にテーマのデフォルトのテキストの色を使用します。コードまたはスタイル属性によってタブのテキストの色を設定できるようにするには、クラスにパッチを適用する必要があります。 1つの代替方法は、 PagerSlidingTabStrip ライブラリを使用することです。

1
BladeCoder

私はPanayiotis Irakleousソリューションを使用していますが、onPageSelectedプロシージャの一部がループしないようにする方が良いと思います。

手順は同じです。現在のタブインデックスを保存するには、intクラスメンバー(例:mCurrentTabIndex)を追加する必要があります。

ステップ3.aで、追加する必要があります

mCurrentTabIndex = i;

したがって、次のようになります。

if (i == mViewPager.getCurrentItem()) {
    tabView.setSelected(true);
    mCurrentTabIndex = i;
}

最後に、ステップ3.bで、ループ部分をこれに置き換えます。

mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false);
mTabStrip.getChildAt(position).setSelected(true);
mCurrentTabIndex = position;

したがって、コードは次のようになります。

@Override
public void onPageSelected(int position) {
    if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
        mTabStrip.onViewPagerPageChanged(position, 0f);
        scrollToTab(position, 0);
    }

    mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false);
    mTabStrip.getChildAt(position).setSelected(true);
    mCurrentTabIndex = position;

    if (mViewPagerPageChangeListener != null) {
        mViewPagerPageChangeListener.onPageSelected(position);
    }
}    
0
saggaf.arsyad

SlidingTabLayoutのコードを見る...カスタムタブビューを設定できます。これにより、タブのコンテンツを制御し、カスタムタブのテキストの色を設定できます。 SlideingTabLayout.setCustomTabView(int layoutResId、int textViewId)をご覧ください。

0
simplatek