ActionBarCompatを使用するアプリケーションを作成しました
SlidingTabLayoutクラスを使用してタブを作成しました。
クラスはこれです:
しかし、タブの色は変更できません...
私の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
タブのテキストの色を変更するにはどうすればよいですか?
ありがとう!!!
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);
}
}
ファイル_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
_を好みの色に置き換えます。
クラスが使用しているTextViewを確認できるはずです。
tabTitleView.setTextColor(getResources().getColor(R.color.white));
私のクラスでは、TextViewはtabTitleViewでした。 Googleが提供するデフォルトの例を使用している場合は、populateTabStrip関数の下にあります。
スライドタブレイアウトとスライドタブストリップのコードをコピーして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));
@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));
}
これはあなたを助けるかもしれません
残念ながら、このクラスはコードを編集せずにタブのテキストの色をカスタマイズすることをサポートせず、常にテーマのデフォルトのテキストの色を使用します。コードまたはスタイル属性によってタブのテキストの色を設定できるようにするには、クラスにパッチを適用する必要があります。 1つの代替方法は、 PagerSlidingTabStrip ライブラリを使用することです。
私は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);
}
}
SlidingTabLayoutのコードを見る...カスタムタブビューを設定できます。これにより、タブのコンテンツを制御し、カスタムタブのテキストの色を設定できます。 SlideingTabLayout.setCustomTabView(int layoutResId、int textViewId)をご覧ください。