2015-07-08 2 views
38

Я установил android:textAllCaps="false" в своем android.support.design.widget.TabLayout думал, что он отображает заголовок Tab только во всех шапках.android: textAllCaps = "false" не работает для дизайна TabLayout Поддержка

Как я могу удалить все колпачки?

+0

Я считаю, что вы должны определить это в определенном стиле, который наследует базовый стиль для TabLayout. – Vannen

+0

@ Ваннен может показать мне какой-то код, который решает эту проблему? – dhuma1981

+0

используйте editText.setFilters (новый InputFilter [] {new InputFilter.AllCaps()}); –

ответ

95

ОБНОВЛЕНИЕ ДЛЯ ДИЗАЙНА БИБЛИОТЕКА 23.2.0+

оригинальный ответ не работает с дизайном библиотеки 23.2.0 или более поздней версии. Спасибо за @ fahmad6, отметил в комментарии, если кто-то пропустил этот комментарий, я поставлю его здесь. Вам необходимо установить textAllCaps и android:textAllCaps на false, чтобы отключить все настройки заглавной буквы.

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
     <item name="textAllCaps">false</item> 
     <item name="android:textAllCaps">false</item> 
</style> 

ОРИГИНАЛЬНЫЙ ОТВЕТ

По умолчанию вкладки создаются TabLayout устанавливает этот textAllCaps свойство, чтобы быть правдой, вы должны определить стиль делает этот флаг ложным.

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> 
     <item name="tabTextAppearance">@style/MyCustomTextAppearance</item> 
</style> 

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
     <item name="textAllCaps">false</item> 
</style> 
+3

Ваш ответ выглядит правильно, но я не знаю, почему, это не сработало для меня – Moinkhan

+0

@Moinkhan Я ничего не могу сказать, не зная, что вы сделали в макете и какой код вы написали! Посмотрите на код и посмотрите, есть ли ошибка! –

+0

Я просто применяю тему 'MyCustomTabLayout' в TabLayout, используя' app: theme'. Я не думаю, что это неправильно ... – Moinkhan

2

В версиях priror до 14, вам нужно установить (как прокомментировал Paresh Mayani):

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> 
    <item name="tabTextAppearance">@style/MyCustomTextAppearance</item> 
</style> 

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
    <item name="textAllCaps">false</item> 
</style> 

Но, в случае андроида версии равен или больше 14, вам необходимо установить :

<item name="android:textAllCaps">false</item> 

Так что, если вы должны быть совместимы с версиями до и после 14 лет, вы также необходимо создать папку ценности-V14, и файл styles.xml в этом folde r с содержанием:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> 
    <style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
     <item name="android:textAllCaps">false</item> 
    </style> 
</resources> 
0

Вы также можете сделать это в своем Java-коде. Если вы используете SlidingTabLayout посмотреть на этом примере:

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);//see line 38 above change the value their in TAB_VIEW_TEXT_SIZE_SP. 
     textView.setTypeface(Typeface.DEFAULT);//From DEFAULT_BOLD 
     textView.setTextColor(Color.parseColor("#536DFE"));//Text color of the words in the tabs. Indigo A200 

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
      // If we're running on Honeycomb or newer, then we can use the Theme's 
     // selectableItemBackground to ensure that the View has a pressed state 
      TypedValue outValue = new TypedValue(); 
      getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); 
      textView.setBackgroundResource(outValue.resourceId); 
     } 

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ 
      // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style 
      textView.setAllCaps(true); 
     } 

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

     return textView; 
    } 

Обратите внимание, что textView.setAllCaps() имеет истинную как периметр:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ 
      // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style 
      textView.setAllCaps(true); 
     } 

Когда я изменил это (ложное) она решена проблема для меня:

textView.setAllCaps(false); 

Кроме того, мой файл ресурсов строки, которые я использую для вкладок выглядит следующим образом:

<string name="tab_title">Title with capital and smaller case</string> 

Однако, если у него были все колпачки наподобие> TITLE WITH ALL CAPS <, вы все равно, конечно, получите все шапки на своих вкладках.

Я не внес никаких изменений.

Следует отметить, что вы также можете установить textView.setAllCaps (false), но это не имело никакого значения в моем случае. Я просто прокомментировал textView.setAllCaps (true).

35

@Paresh Mayani ответ правильный, однако вы можете создать только вкладку Стиль

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
    <item name="textAllCaps">false</item> 
</style> 

и использовать его с помощью

<android.support.design.widget.TabLayout 
    app:tabTextAppearance="@style/MyCustomTextAppearance" 
    .../> 
+0

Решение @Muhammad Umair Shafique работает. Мы должны использовать атрибут app: tabTextAppearance atrribute вместо атрибута style. –

16

https://stackoverflow.com/a/34678235/1025379

<android.support.design.widget.TabLayout 
    app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" 
/> 
+0

да это правильный ответ. –

+0

Подтвердите, никаких других ответов с большим количеством голосов на этой странице не сделал трюк для меня, кроме этого. Мой проект имеет minSdkVersion = 16, targetSdkVersion = 26, дизайн библиотеки версии 26.0.0-alpha1, и я использую 'android.support.design.widget.TabLayout'. –

3

Вот простое решение ... .Enjoy

for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) { 
     TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1)); 
     tabTextView.setAllCaps(false); 
    } 
2

использовать этот атрибут app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" Он будет работать.

<android.support.design.widget.TabLayout 
    android:id="@+id/tablayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    app:tabGravity="fill" 
    app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" 
    app:tabIndicatorColor="@color/colorPrimary" 
    app:tabMode="fixed" 
    app:tabPaddingStart="0dp" /> 
0

Для тех , которые не могут получить работу других ответов.

Определение стиля отлично работает, когда у вас есть текст одной строки. Если вы внимательно изучите TabLayout, вы увидите, что оно использует поле design_tab_text_size_2line, когда вкладки имеют несколько строк.

Единственный способ найти это поле - переопределить его в файле размера.

Так положить это в ваших ценностях/dimens.xml

<dimen name="design_tab_text_size_2line" tools:override="true">@dimen/10sp</dimen> 

Надеется, что это помогает.

0

Попробуй следующий метод, и вы можете реализовать все методы TextView в TabLayout

private void setCustomTab() { 

    ViewGroup vg = (ViewGroup) mTabLayout.getChildAt(0); 
    int tabsCount = vg.getChildCount(); 
    for (int j = 0; j < tabsCount; j++) { 
     ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); 
     int tabChildsCount = vgTab.getChildCount(); 
     for (int i = 0; i < tabChildsCount; i++) { 
      View tabViewChild = vgTab.getChildAt(i); 
      if (tabViewChild instanceof TextView) { 
       ((TextView) tabViewChild).setTypeface(ResourcesCompat.getFont(this,R.font.montserrat_medium)); 
       ((TextView) tabViewChild).setAllCaps(false); 
      } 
     } 
    } 
} 

Надеется, что это помогает.

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