2015-02-04 1 views
6

Привет, я использую раздвижную компоновку вкладок в моем приложении, и все это отлично работает. Единственное, что я не понимаю, - это то, что текст моих вкладок находится в верхнем регистре.Текст макета раздвижной закладки в верхнем регистре

Я напечатал текст, чтобы вкладки попадали внутрь класса скользящих вкладок, и они не в верхнем регистре. Я огляделся и не вызывается метод toUpperCase.

Вот код из класса, который задает текст:

private void populateTabStrip() { 
     final PagerAdapter adapter = mViewPager.getAdapter(); 
     final View.OnClickListener tabClickListener = new TabClickListener(); 

     for (int i = 0; i < adapter.getCount(); i++) { 
      View tabView = null; 
      TextView tabTitleView = null; 

      if (mTabViewLayoutId != 0) { 
       // If there is a custom tab view layout id set, try and inflate it 
       tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, 
         false); 
       tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); 
      } 

      if (tabView == null) { 
       tabView = createDefaultTabView(getContext()); 
      } 

      if (tabTitleView == null && TextView.class.isInstance(tabView)) { 
       tabTitleView = (TextView) tabView; 
      } 

      if (mDistributeEvenly) { 
       LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams(); 
       lp.width = 0; 
       lp.weight = 1; 
      } 

      tabTitleView.setText(adapter.getPageTitle(i)); 
      tabTitleView.setTextColor(getResources().getColor(R.color.da_blue)); 
      tabView.setOnClickListener(tabClickListener); 
      String desc = mContentDescriptions.get(i, null); 
      if (desc != null) { 
       tabView.setContentDescription(desc); 
      } 

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

Я уверен, что я могу сделать это с помощью стиля, но на самом деле не уверен, какой из них использовать. Это то, что у меня есть в моих стилях:

<resources> 

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="android:actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item> 
     <item name="actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item> 
    </style> 


    <style name="ActionBarTabTextStyle.Tabtheme" parent="@android:style/Widget.Holo.ActionBar.TabText"> 
     <item name="android:textAllCaps">false</item> 
    </style> 
</resources> 
+0

Вы видите это в L? Это поведение по умолчанию. Вы можете обратиться к этому ответу, если не хотите, чтобы все кепки. http://stackoverflow.com/questions/26958909/why-is-my-button-text-coerced-to-all-caps-on-lollipop/26959656#26959656 –

ответ

5

Найден ответ он был в методе createDefaultTabView().

Необходимо изменить textView.setAllCaps (true) на false.

protected TextView createDefaultTabView(Context context) { 
    TextView textView = new TextView(context); 
    textView.setGravity(Gravity.CENTER); 
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); 
    textView.setLayoutParams(new LinearLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

    TypedValue outValue = new TypedValue(); 
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, 
      outValue, true); 
    textView.setBackgroundResource(outValue.resourceId); 
    textView.setAllCaps(false); **// Changed to false and it did the trick** 

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); 
    textView.setPadding(padding, padding, padding, padding); 

    return textView; 
} 
+0

Попытка изменить значение TAB_VIEW_TEXT_SIZE_SP в вышеуказанном методе, но изменения не отражены –

16

Если вы используете "android.support.design.widget.TabLayout" необходимо установить app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"

+0

только это сработало для меня –

+0

спасибо. Меня устраивает! – susemi99

0

просто добавьте эту строку в tabTitleView.setAllCaps(false); populateTabStrip()

Смежные вопросы