android: textAllCaps= "false" не работает для поддержки дизайна TabLayout

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

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

11 ответов


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

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

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

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

по умолчанию вкладки создаются TabLayout устанавливает свойство textAllCaps равным true, вы должны определить стиль, делающий этот флаг 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>

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

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

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

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

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

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

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

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

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

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

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

единственный способ, которым я мог бы найти это поле, - переопределить его в вашем файле dimen.

так положите это в ваш значения/дименс.в XML

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

надеюсь, что это помогает.


в версиях priror до 14 вам нужно установить (как прокомментировал Пареш Маяни):

<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 и стили файлов.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>

вы также можете сделать это в коде 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);
        }

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

textView.setAllCaps(false);

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

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

однако, если бы у него были все шапки, как > название со всеми шапками

других изменений я не внес.

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


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

надеюсь, что это помогает.


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

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

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

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

в стилях.XML-код:

<style name="TabLayout" parent="Widget.Design.TabLayout">
    <item name="android:textSize">12sp</item>
    <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="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"
    />

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

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