android.support.design.widget.TabLayout
中设置了 android:textAllCaps="false"
,但标签标题仍然以全大写字母显示。如何取消全大写字母?
android.support.design.widget.TabLayout
中设置了 android:textAllCaps="false"
,但标签标题仍然以全大写字母显示。设计库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属性设置为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>
textAllCaps
,而问题使用了 android:textAllCaps
。 - Fabian Frankandroid:textAllCaps
和 textAllCaps
并将它们都设置为false,才能使我的文本按预期显示(即显示 "Local" 而不是 "LOCAL")。仅尝试其中一个并不能达到效果。 - fawaadapp:tabTextAppearance="@style/MyCustomTextAppearance"
,这样就可以正常工作了。 - Vidhi Dave@Paresh Mayani的回答是正确的,但是您只能创建选项卡样式
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="textAllCaps">false</item>
</style>
并使用它
<android.support.design.widget.TabLayout
app:tabTextAppearance="@style/MyCustomTextAppearance"
.../>
使用此属性 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" />
https://dev59.com/RIfca4cB1Zd3GeqPj4fI#34678235
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
android.support.design.widget.TabLayout
。 - Tom Ladekcom.google.android.material.tabs.TabLayout
上工作。 - Farid在我的情况下,有两种变体可行:
1)由Bogdan(susemi99)提供:
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
2)由Paresh Mayani提供。我想要同时使用android:textAllCaps="false"和android:textSize="15sp",所以他的旧方法适用。
在styles.xml中编写以下内容(parent可能会有所不同,例如"@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>
希望这有所帮助。
这个对我来说只需要一行就可以完成
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"/>
这里有一个简单的解决方案……请享用
for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) {
TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1));
tabTextView.setAllCaps(false);
}
尝试以下方法,您可以在 TabLayout
中实现所有 TextView
的方法。
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="textAllCaps">false</item>