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