tablayout - tabs con iconos android
android: textAllCaps="false" no funciona para el soporte de diseƱo TabLayout (11)
He configurado
android:textAllCaps="false"
en mi
android.support.design.widget.TabLayout
pensó que muestra el título de la pestaña solo en mayúsculas.
¿Cómo puedo quitar todas las tapas?
Aquí hay una solución simple ... Disfruta
for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) {
TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1));
tabTextView.setAllCaps(false);
}
En las versiones priror a 14, debe configurar (como comentó 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>
Pero, en caso de que la versión de Android sea igual o superior a 14, debe configurar:
<item name="android:textAllCaps">false</item>
Entonces, si necesita ser compatible con las versiones anteriores y posteriores a 14, también debe crear una carpeta valores-v14 y un archivo styles.xml en esa carpeta con el contenido:
<?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>
En mi caso funcionan dos variantes:
1) Por Bogdan (susemi99):
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
2) Por Paresh Mayani.
Quería tener
android:textAllCaps="false"
y
android:textSize="15sp"
simultáneamente, por lo que su antiguo método funciona.
En
styles.xml
escriba (el padre puede variar, por ejemplo, "@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>
Aplicar este estilo en el diseño:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TabLayout"
/>
La respuesta de @Paresh Mayani es correcta, sin embargo, solo puede crear un estilo de pestaña
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="textAllCaps">false</item>
</style>
Y úsalo usando
<android.support.design.widget.TabLayout
app:tabTextAppearance="@style/MyCustomTextAppearance"
.../>
Para aquellos que no pueden trabajar, otras respuestas .
La definición de un estilo funciona bien cuando tiene texto de pestaña de una sola línea. Si observa de cerca el TabLayout, verá que está usando un campo design_tab_text_size_2line cuando las pestañas tienen más de una línea.
La única forma que podría encontrar para efectuar este campo es anularlo en su archivo dimen.
Así que pon esto en tus valores / dimens.xml
<dimen name="design_tab_text_size_2line" tools:override="true">10sp</dimen>
Espero eso ayude.
Pruebe el siguiente método y puede implementar todos los métodos de
TextView
en
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);
}
}
}
}
Espero eso ayude.
También puede hacer esto en su código Java. Si está utilizando un SlidingTabLayout, mire este ejemplo:
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;
}
Observe que textView.setAllCaps () tiene true como el perímetro:
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);
}
Cuando cambié esto a (falso) me resolvió el problema:
textView.setAllCaps(false);
También mi archivo de recursos de cadena que uso para las pestañas se ve así:
<string name="tab_title">Title with capital and smaller case</string>
Sin embargo, si tuviera todas las mayúsculas como> TÍTULO CON TODAS LAS MAYÚSCULAS <por supuesto, todavía tendría todas las mayúsculas en sus pestañas.
No hice otros cambios.
Cabe destacar que también puede establecer textView.setAllCaps (falso), pero esto no hizo ninguna diferencia en mi caso. Acabo de comentar textView.setAllCaps (verdadero).
use esta
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
atributos
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
Funcionará.
<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" />
https://.com/a/34678235/1025379
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
ACTUALIZACIÓN PARA LA BIBLIOTECA DE DISEÑO 23.2.0+
La respuesta original no funciona con la biblioteca de diseño 23.2.0 o posterior.
Gracias por @ fahmad6 señalado en el comentario, en caso de que alguien se haya perdido ese comentario, lo pondré aquí.
textAllCaps
establecer
textAllCaps
y
android:textAllCaps
en
false
para deshabilitar todas las configuraciones de mayúsculas.
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="textAllCaps">false</item>
<item name="android:textAllCaps">false</item>
</style>
RESPUESTA ORIGINAL
De manera predeterminada, TabLayout crea las pestañas y establece que la propiedad textAllCaps sea verdadera, debe definir un estilo que haga que esta bandera sea falsa.
<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>
Cambio:
<item name="android:textAllCaps">false</item>
Con:
<item name="textAllCaps">false</item>