Tôi đã thiết lập android:textAllCaps="false"
trong tôi android.support.design.widget.TabLayout
nghĩ nó là hiển thị các Tab Tiêu đề chỉ trong Tất cả mũ.
Làm cách nào tôi có thể loại bỏ tất cả các chữ hoa?
Tôi đã thiết lập android:textAllCaps="false"
trong tôi android.support.design.widget.TabLayout
nghĩ nó là hiển thị các Tab Tiêu đề chỉ trong Tất cả mũ.
Làm cách nào tôi có thể loại bỏ tất cả các chữ hoa?
Câu trả lời:
CẬP NHẬT CHO THƯ VIỆN THIẾT KẾ 23.2.0+
Câu trả lời ban đầu không hoạt động với thư viện thiết kế 23.2.0 trở lên. Cảm ơn @ fahmad6 đã chỉ ra trong nhận xét, trong trường hợp ai đó bỏ lỡ nhận xét đó, tôi sẽ đặt nó ở đây. Bạn cần phải đặt cả textAllCaps
và android:textAllCaps
để false
vô hiệu hóa tất cả tận dụng thiết lập.
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="textAllCaps">false</item>
<item name="android:textAllCaps">false</item>
</style>
CÂU TRẢ LỜI GỐC
Theo mặc định, các tab được tạo bởi TabLayout đặt thuộc tính textAllCaps là true, bạn phải xác định kiểu làm cho cờ này là 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
trong khi câu hỏi đang sử dụng android:textAllCaps
.
android:textAllCaps
android:textAllCaps
và textAllCaps
và đặt chúng thành false để văn bản của tôi hiển thị như mong muốn (tức là "Local" thay vì "LOCAL"). Cố gắng một mình đã không làm được thủ thuật.
Câu trả lời @Paresh Mayani là đúng tuy nhiên bạn chỉ có thể tạo kiểu tab
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="textAllCaps">false</item>
</style>
Và sử dụng nó bằng cách sử dụng
<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
sử dụng thuộc tính này app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
Nó sẽ hoạt động.
<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" />
Trong trường hợp của tôi, hai biến thể hoạt động:
1) Bởi Bogdan (susemi99):
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
2) Của Paresh Mayani. Tôi muốn có android:textAllCaps="false"
và android:textSize="15sp"
đồng thời, vì vậy phương pháp cũ của anh ấy hoạt động.
Trong styles.xml
văn bản (ví dụ: "@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>
Áp dụng kiểu này trong bố cục:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TabLayout"
/>
Đối với những người không thể làm việc các câu trả lời khác .
Việc xác định kiểu hoạt động tốt khi bạn có văn bản tab dòng đơn. Nếu bạn xem xét kỹ TabLayout, bạn sẽ thấy rằng nó đang sử dụng trường design_tab_text_size_2line khi các tab có nhiều hơn một dòng.
Cách duy nhất tôi có thể tìm thấy để thực hiện trường này là ghi đè nó trong tệp dimen của bạn.
Vì vậy, hãy đặt nó vào giá trị của bạn /mens.xml
<dimen name="design_tab_text_size_2line" tools:override="true">10sp</dimen>
Hy vọng nó giúp.
Đây là giải pháp đơn giản .... Thưởng thức
for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) {
TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1));
tabTextView.setAllCaps(false);
}
Trong các phiên bản priror thành 14, bạn cần đặt (như nhận xét của 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>
Tuy nhiên, trong trường hợp phiên bản android bằng hoặc lớn hơn 14, bạn cần đặt:
<item name="android:textAllCaps">false</item>
Vì vậy, nếu bạn cần tương thích với các phiên bản trước và sau 14, bạn cũng cần tạo một thư mục giá trị-v14 và tệp styles.xml trong thư mục đó với nội dung:
<?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>
Hãy thử phương pháp sau và bạn có thể triển khai tất cả các phương pháp TextView
trongTabLayout
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);
}
}
}
}
Hy vọng nó giúp.
Thay đổi: <item name="android:textAllCaps">false</item>
Với: <item name="textAllCaps">false</item>
Bạn cũng có thể làm điều này trong mã Java của mình. Nếu bạn đang sử dụng SlidingTabLayout, hãy xem mẫu này:
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;
}
Lưu ý rằng textView.setAllCaps () có true là chu vi:
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);
}
Khi tôi thay đổi điều này thành (false), nó đã giải quyết được vấn đề cho tôi:
textView.setAllCaps(false);
Ngoài ra, tệp tài nguyên chuỗi của tôi mà tôi sử dụng cho các tab trông giống như sau:
<string name="tab_title">Title with capital and smaller case</string>
Tuy nhiên, nếu nó có tất cả các chữ hoa như> TITLE VỚI TẤT CẢ CÁC CHỮ HOA <thì tất nhiên bạn vẫn sẽ viết hoa tất cả các tab của mình.
Tôi không thực hiện thay đổi nào khác.
Đáng chú ý là bạn cũng có thể đặt textView.setAllCaps (false), nhưng điều này không có gì khác biệt trong trường hợp của tôi. Tôi vừa nhận xét textView.setAllCaps (true).
Chỉ cần thêm cái này vào tệp kiểu tùy chỉnh của bạn
<item name="android:textStyle">normal</item>
Tôi đọc tất cả các giải pháp trên và tất cả đều dẫn đến điều này.