2016-12-02 3 views
1

タブが選択されているときに、テキストが黒色で、画面に7つの日付タブがあります。他の選択可能なタブは白色である。日付が別の月になると、テキストの色を灰色にします。TabLayoutのタブのテキストの色をプログラムによって異なる色に変更する

私は最初のタブが0で、2番目のタブが1であり、6まで続くと仮定しました。 画像のように、タブ(3)、タブ(4)、タブ(5)タブ(6)。必要な条件(xmlではない)を満たしたときに、これらの4つのタブのテキストの色を灰色に設定するには、プログラムでどのように行うことができますか?

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:paddingTop="8dp" 
    android:paddingBottom="8dp" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin"> 

    <TextView 
     android:id="@+id/lblWeekMsg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/week" 
     android:textAppearance="?attr/textAppearanceListItem" /> 
    <TextView 
     android:id="@+id/lblWeekNo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toEndOf="@id/lblWeekMsg" 
     android:layout_alignBaseline="@id/lblWeekMsg" 
     android:text="" 
     android:textAppearance="?attr/textAppearanceListItem" /> 

</RelativeLayout> 

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/coordinator_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="30"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/app_bar_layout"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabTextColor="@android:color/white" 
      app:tabMode="scrollable" 
      app:tabGravity="fill" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</android.support.design.widget.CoordinatorLayout> 

私はTRを持っていたフラグメント

public void setupViewPager(ViewPager viewPager, ArrayList<String> id, ArrayList<String> tasks, 
          ArrayList<Double> mondayHours, ArrayList<Double> tuesdayHours, 
          ArrayList<Double> wednesdayHours, ArrayList<Double> thursdayHours, 
          ArrayList<Double> fridayHours, ArrayList<Double> saturdayHours, 
          ArrayList<Double> sundayHours) { 
    Bundle bundle = new Bundle(); 
    bundle.putStringArrayList(EXTRA_CHECKED_TASK_ID, id); 
    bundle.putStringArrayList(EXTRA_CHECKED_TASKS, tasks); 
    bundle.putSerializable(EXTRA_MONDAY, mondayHours); 
    bundle.putSerializable(EXTRA_TUESDAY, tuesdayHours); 
    bundle.putSerializable(EXTRA_WEDNESDAY, wednesdayHours); 
    bundle.putSerializable(EXTRA_THURSDAY, thursdayHours); 
    bundle.putSerializable(EXTRA_FRIDAY, fridayHours); 
    bundle.putSerializable(EXTRA_SATURDAY, saturdayHours); 
    bundle.putSerializable(EXTRA_SUNDAY, sundayHours); 

    final String MON = "MON" + "\n" + MainActivity.sevenDatesList.get(0); 
    final String TUE = "TUE" + "\n" + MainActivity.sevenDatesList.get(1); 
    final String WED = "WED" + "\n" + MainActivity.sevenDatesList.get(2); 
    final String THU = "THU" + "\n" + MainActivity.sevenDatesList.get(3); 
    final String FRI = "FRI" + "\n" + MainActivity.sevenDatesList.get(4); 
    final String SAT = "SAT" + "\n" + MainActivity.sevenDatesList.get(5); 
    final String SUN = "SUN" + "\n" + MainActivity.sevenDatesList.get(6); 

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), bundle); 
    adapter.addFragment(new MondayFragment(), MON); 
    adapter.addFragment(new TuesdayFragment(), TUE); 
    adapter.addFragment(new WednesdayFragment(), WED); 
    adapter.addFragment(new ThursdayFragment(), THU); 
    adapter.addFragment(new FridayFragment(), FRI); 
    adapter.addFragment(new SaturdayFragment(), SAT); 
    adapter.addFragment(new SundayFragment(), SUN); 

    viewPager.setAdapter(adapter); 
} 

でタブを作成するには、この方法を使用thisでied、私のコードはtabWidgetを使用していませんでした。 thisでも試してみましたが、私のコードではtabHostを使用していませんでした。 @Bhavesh Misriの提案に基づいて

私のソリューション:

ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); 
    //get number of tab 
    int tabsCount = vg.getChildCount(); 
    //loop the tab 
    for (int j = 0; j < tabsCount; j++) { 
     //get view of selected tab 
     ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); 

     //when the day is not required to display - out of range 
     if(j<lesserThan || j>largerThan){ 
      //disable the selected tab 
      vgTab.setEnabled(false); 
      //set the not-required tab color transparent ratio 
      vgTab.setAlpha((float) 0.50); 
     } 
    } 
+0

可能であれば、タブを初期化して入力するビジネスロジックを投稿します。 –

+0

@PravinD思い出してくれてありがとう、私はコードスニペットを追加しました。 –

+0

カスタムテキストレイアウトを使用してタブテキストをレンダリングしていますか?また、同じ目的のためにFragmentPagerAdapterにあるaddItem(int position)をオーバーライドするカスタムメソッドaddFragmentを使用してアダプタにフラグメントを追加する理由は? –

答えて

4

これを試してみて、これはあなたのために働くなら、私に知らせて:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
      if (tab.getPosition() == 0) { 
       tabLayout.getTabAt(0).getIcon().setAlpha(255); 
       tabLayout.getTabAt(1).getIcon().setAlpha(100); 
       tabLayout.getTabAt(2).getIcon().setAlpha(100); 
      } else if (tab.getPosition() == 1) { 
       tabLayout.getTabAt(0).getIcon().setAlpha(100); 
       tabLayout.getTabAt(1).getIcon().setAlpha(255); 
       tabLayout.getTabAt(2).getIcon().setAlpha(100); 

      } else if (tab.getPosition() == 2) { 
       tabLayout.getTabAt(0).getIcon().setAlpha(100); 
       tabLayout.getTabAt(1).getIcon().setAlpha(100); 
       tabLayout.getTabAt(2).getIcon().setAlpha(255); 

      } 
     } 

@SuryaプラカシュKushawahはあなたの方法が良いです。

+0

私のために働いた、ありがとう。 – Dhruv

+0

@Dhruvあなたの歓迎 –

+0

あなたのtabLayout.getTabAt(0).getIcon()。setAlpha(100);手がかりをくれた、ありがとう! –

2

style.xmlにスタイルを作成し、ここに

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> 

     <item name="tabIndicatorColor">@color/colorAccent</item> 
     <item name="tabIndicatorHeight">2dp</item> 
     <item name="tabTextAppearance">@style/MyCustomTabTextAppearance</item> 
     <item name="tabSelectedTextColor">@color/colorAccent</item> 
    </style> 

    <style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab"> 
     <item name="android:textSize">@dimen/title_text_size</item> 
     <item name="android:textColor">@color/secondaryText</item> 
     <item name="textAllCaps">false</item> 
     <item name="android:textStyle">normal</item> 
    </style> 

コール

<android.support.design.widget.TabLayout 
       android:id="@+id/tab_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabTextColor="@android:color/white" 
       app:tabMode="scrollable" 
     **style="@style/MyCustomTabLayout"** 
       app:tabGravity="fill" /> 
+0

特定の条件に基づいてテキストの色を変更する必要があるため、プログラム的に変更する必要があります。 –

+0

あなたはhttp://stackoverflow.com/a/40928932/5209766 –

3

セット]タブのテキストの色、このよう以下のようなXMLレイアウトに呼び出す:

tabLayout.setTabTextColors(ContextCompat.getColorStateList(this, R.color.tab_selector)); 
tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.indicator)); 
+0

に移動することができますありがとうございます。このコードは、TabLayout全体のテキストの色を変更します。私が望むのは、条件を満たすときに、単一のタブのテキストの色を変更することです。 –

0

ソリューション上記の私のコードに基づいて:

ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); 
//get view of the 6th tab - start with zero 
ViewGroup vgTabSixth = (ViewGroup) vg.getChildAt(5); 
//set the not-required tab color transparent ratio 20% 
vgTabSixth.setAlpha((float) 0.20); 
関連する問題