Подтвердить что ты не робот

Android: textAllCaps = "false" не работает для дизайна TabLayout

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

Как удалить все кепки?

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ ДЛЯ ДИЗАЙН-БИБЛИОТЕКИ 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 является истинным, вам нужно определить стиль, создающий этот флаг false.

<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>

Ответ 2

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

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

И используйте его с помощью

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

Ответ 3

fooobar.com/questions/171382/...

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

Ответ 4

используйте этот атрибут 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" />

Ответ 5

Вот простое решение.... Наслаждайтесь

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

Ответ 6

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

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

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

Так что поместите это в ваши значения /sizess.xml

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

Надеюсь, поможет.

Ответ 7

В версиях priror to 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>

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

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

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

<?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>

Ответ 8

В моем случае работают два варианта:

1) Богдан (susemi99):

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

2) Пореш Майяни. Я хотел иметь android:textAllCaps="false" и android:textSize="15sp" одновременно, поэтому его старый метод работает.

В styles.xml запись (родитель может отличаться, например, "@android: style/TextAppearance.Widget.TabWidget", "TextAppearance.Design.Tab"):

<style name="TabLayout" parent="Widget.Design.TabLayout">
    <item name="tabIndicatorColor">@color/color_blue</item>
    <item name="tabSelectedTextColor">@color/color_blue</item>
    <item name="tabTextColor">@color/black</item>
    <item name="tabTextAppearance">@style/TabLayoutTextAppearance</item>
</style>

<style name="TabLayoutTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="android:textSize">15sp</item>
    <item name="textAllCaps">false</item>
    <item name="android:textAllCaps">false</item>
</style>

Примените этот стиль в макете:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/TabLayout"
    />

Ответ 9

Вы также можете сделать это в своем 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() имеет true как периметр:

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);
        }

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

textView.setAllCaps(false);

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

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

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

Я не сделал никаких других изменений.

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

Ответ 10

Попробуйте использовать следующий метод, и вы можете реализовать все методы 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);
            }
        }
    }
}

Надеюсь, что это поможет.

Ответ 11

Изменение: <item name="android:textAllCaps">false</item>

С помощью: <item name="textAllCaps">false</item>