У android:textAllCaps="false"
своїй android.support.design.widget.TabLayout
думці я встановив, що заголовок вкладки відображається лише у всіх великих колонтитулах.
Як я можу зняти всі кришки?
У android:textAllCaps="false"
своїй android.support.design.widget.TabLayout
думці я встановив, що заголовок вкладки відображається лише у всіх великих колонтитулах.
Як я можу зняти всі кришки?
Відповіді:
ОНОВЛЕННЯ ДИЗАЙН-БІБЛІОТЕКИ 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>
textAllCaps
тоді як питання використовує android:textAllCaps
.
android:textAllCaps
android:textAllCaps
і, textAllCaps
і встановити їх як false, щоб мій текст відображався за бажанням (тобто "Місцевий" замість "LOCAL"). Спроба будь-якої самості не зробила трюку.
Відповідь @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"
/>
android.support.design.widget.TabLayout
.
com.google.android.material.tabs.TabLayout
використовуйте цей атрибут 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" />
У моєму випадку працюють два варіанти:
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"
/>
Для тих, хто не може отримати роботу, інші відповіді .
Визначення стилю добре працює, коли у вас є текст із вкладками в один рядок. Якщо ви уважно розглянете TabLayout, ви побачите, що він використовує поле design_tab_text_size_2line, коли вкладки мають більше одного рядка.
Єдиний спосіб, яким я міг би знайти це поле, - це замінити його у вашому файлі dimen.
Тож помістіть це у свої values / dimens.xml
<dimen name="design_tab_text_size_2line" tools:override="true">10sp</dimen>
Сподіваюся, це допоможе.
Ось просте рішення .... Насолоджуйтесь
for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) {
TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1));
tabTextView.setAllCaps(false);
}
У версіях 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 та файл 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>
Спробуйте наступний метод, і ви можете реалізувати всі методи 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);
}
}
}
}
Сподіваюся, це допоможе.
Зміна: <item name="android:textAllCaps">false</item>
З: <item name="textAllCaps">false</item>
Ви також можете зробити це у своєму коді 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 (правда).
Просто додайте це до власного файлу стилю
<item name="android:textStyle">normal</item>
Я прочитав усі вищезазначені рішення і всі ведуть до цього.