android: textAllCaps = “false” không hoạt động cho Hỗ trợ thiết kế TabLayout


79

Tôi đã thiết lập android:textAllCaps="false"trong tôi android.support.design.widget.TabLayoutnghĩ 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 tin rằng bạn phải xác định điều đó theo một kiểu cụ thể kế thừa kiểu cơ sở cho TabLayout.
Vannen

@Vannen có thể vui lòng chỉ cho tôi một số mã giải quyết vấn đề này không?
dhuma1981

vui lòng sử dụng editText.setFilters (new InputFilter [] {new InputFilter.AllCaps ()});
Dhiren Hamal

Câu trả lời:


177

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ả textAllCapsandroid:textAllCapsđể falsevô 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>

4
Nhìn câu trả lời của bạn đúng nhưng tôi không biết tại sao, nó không có tác dụng đối với tôi
Moinkhan

7
@Moinkhan Nó đang hoạt động. Sử dụng phong cách theo cách này = "@ style / MyCustomTabLayout"
dhuma1981

2
Phần quan trọng ở đây là câu trả lời đang sử dụng textAllCapstrong khi câu hỏi đang sử dụng android:textAllCaps.
Fabian Frank

1
Giải pháp này ngừng hoạt động với appCompat 23.2.0. Nó wotking với:android:textAllCaps
mtrakal

3
Thật thú vị, vì những lý do tôi không thể giải thích, tôi đã phải thêm rõ ràng cả hai android:textAllCapstextAllCapsvà đặ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.
fawaad

77

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

Giải pháp của @Muhammad Umair Shafique đang hoạt động. Chúng ta phải sử dụng atrribute 'app: tabTextAppearance' thay vì thuộc tính 'style'.
thilina Kj

1
Đây có vẻ là một câu trả lời tốt hơn câu trả lời được chấp nhận, vì chỉ có 1 kiểu được tạo.
Cheok Yan Cheng

35

https://stackoverflow.com/a/34678235/1025379

<android.support.design.widget.TabLayout
    app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>

2
Xác nhận, không có câu trả lời nào khác với nhiều phiếu bầu hơn trên trang này đã làm cho tôi bị lừa ngoài câu trả lời này. Dự án của tôi có minSdkVersion = 16, targetSdkVersion = 26, Thư viện thiết kế phiên bản 26.0.0-alpha1 và tôi đang sử dụng android.support.design.widget.TabLayout.
Tom Ladek

Không hoạt động chocom.google.android.material.tabs.TabLayout
Farid

33

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

1
Chỉ có câu trả lời ở đây là xml thuần túy tất cả bên trong phần tử khung nhìn - không cần thêm kiểu bên ngoài cho điều này hoặc làm bất cứ điều gì trong Java. Đẹp - cảm ơn
Gene Bo

Oh thực sự, bởi vì anh chàng này giỏi sao chép & quá khứ?! Câu hỏi được trả lời với cùng một giải pháp chỉ là một câu trả lời ở trên trong chủ đề này và câu trả lời đó ghi công cho chủ sở hữu trong khi câu trả lời này là chủ sở hữu. Đây là câu trả lời ngay phía trên một stackoverflow.com/a/36191045/5636313
Farid

tôi không thể nhìn thấy câu trả lời này @Farid
Yousef

11

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"android:textSize="15sp"đồng thời, vì vậy phương pháp cũ của anh ấy hoạt động.

Trong styles.xmlvă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"
    />

9

Đố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.


1
Cảm ơn bạn điều này đang làm việc! Chỉ một điều nhỏ mà tôi nhận thấy - khi bạn chuyển giá trị là @ dimen / 10sp, một lỗi biên dịch đang hiển thị. Bạn chỉ nên chuyển sp mình cần mà không có tiền tố "@ dimen /" (ví dụ 10sp).
Slavi Petrov

Thx for the tip :)
Evren Ozturk

2
Tốt tìm thấy @EvrenOzturk. Thích cho bạn.
ralphgabb

4

Đâ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);
    }

2

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>

1

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 TextViewtrongTabLayout

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.


1

Thay đổi: <item name="android:textAllCaps">false</item>

Với: <item name="textAllCaps">false</item>


1

Điều này làm việc cho tôi ...

<style name="TabLayoutStyle" parent="Widget.Design.TabLayout">
    <item name="tabTextAppearance">@style/TabTextAppearance</item>
</style>

<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="textAllCaps">false</item>
</style>

0

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).


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.