464

Trong ứng dụng "Tide Now WA" của tôi mà gần đây tôi đã kiểm tra khả năng tương thích bằng cách sử dụng máy tính bảng Nexus 9 mới (Lollipop - API 21).

Nó viết một số văn bản nút. Ứng dụng này viết văn bản một cách chính xác bằng Android 2.3 và Android 4.0. Tức là hỗn hợp các chữ cái viết hoa và viết thường.

Khi cùng một ứng dụng được chạy trên Nexus 9 của tôi, tất cả các chữ cái trong văn bản đều được viết hoa.

FWIW tệp kê khai của tôi chứa câu lệnh sau:

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"

Tôi có thể sửa lỗi này trong mã của mình hay là lỗi trong hệ điều hành, cảm ơn

|
  • Bạn có thể chia sẻ một mã làm thế nào bạn kết hợp vốn và chữ thường –  16:02:26 16/11/2014
  • chúng được định nghĩa trong strings.xml tôi như <string name = "r1s1"> Seattle </ string> –  16:05:25 16/11/2014
  • Đúng. 21. Quá sớm để gõ đúng. Xin lỗi –  16:28:44 16/11/2014
  • 24
    Văn bản nút được viết hoa toàn bộ theo mặc định khi sử dụng chủ đề Material (hoặc DeviceDefault với API 21+). Điều này đang hoạt động như dự định. –  19:43:38 16/11/2014
  • Câu hỏi rất hữu ích. Cảm ơn bạn –  05:52:36 22/04/2021
664

Tôi không biết tại sao nó lại xảy ra nhưng có 3 nỗ lực nhỏ để thực hiện:

  1. Sử dụng android:textAllCaps="false"tronglayout-v21

  2. Lập trình thay đổi phương thức chuyển đổi của nút. mButton.setTransformationMethod(null);

  3. Kiểm tra phong cách của bạn cho Allcaps

Lưu ý : public void setAllCaps(boolean allCaps), android:textAllCapscó sẵn từ phiên bản API 14.

|
  • 1
    # 1 không tạo ra sự khác biệt. Bạn không chắc chắn về cách làm số 3, không có kiểu nào? Bây giờ đang thử # 2. –  19:31:01 16/11/2014
  • 1
    có, thêm cái này: btn [i] .setTransformationMethod (null); làm cho nó hoạt động nhờ –  19:54:28 16/11/2014
  • 1
    Tôi chấp nhận câu trả lời của Nikola là giải pháp, nhưng muốn chỉ ra phần khác của các câu hỏi là như được cung cấp bởi alanv, người đã giải thích lý do tại sao trong các nhận xét ở trên. –  14:55:08 17/11/2014
  • 1
    Làm việc cho tôi quá, sử dụng phương pháp lập trình vì tệp đính kèm XML của textAllCaps chỉ được hỗ trợ API> 14. cảm ơn! –  23:21:58 06/03/2015
  • 1
    Tôi đã sử dụng <item name="android:textAllCaps">false</item>trong định nghĩa phong cách của tôi –  11:22:48 28/09/2015
172

Đây là những gì tôi đã làm trong giá trị / themes.xml của mình

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/MyButton</item>
    </style>

    <style name="MyButton" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>
|
  • 1
    Để được hỗ trợ trước API Cấp 14, bạn có thể sử dụng <item name="textAllCaps">false</item>. –  22:10:39 25/11/2016
  • 1
    Điều này chỉ áp dụng cho Widget.AppCompat.Button. Câu trả lời tổng quát hơn được Ashish Chaugule đưa ra bên dưới, tức là thêm trực tiếp <item name = "android: textAllCaps"> false </item> vào theme-style. (Mặc dù các câu hỏi ban đầu được hỏi đặc biệt là cho các nút, tôi nghĩ rằng nếu allCaps không muốn cho các nút, nó cũng không muốn cho menu-item, hành động, vv) –  11:35:48 07/01/2018
  • 1
    Không làm việc cho tôi. Đã trở thành công việc khi tôi thay đổi buttonStyleđếnandroid:buttonStyle –  15:09:27 21/01/2018
  • 1
    Trong XML android:textAllCaps="false"(Tôi đang dùng Android Studio 3.0) –  10:45:32 31/07/2018
110

Điều này có thể sửa được trong mã ứng dụng bằng cách thiết lập TransformationMethod của nút, ví dụ:

mButton.setTransformationMethod(null);
|
68

Đặt android: textAllCaps = "false". Nếu bạn đang sử dụng kiểu appcompat, hãy đảm bảo rằng textAllCaps đứng trước kiểu. Nếu không, kiểu sẽ ghi đè lên nó. Ví dụ:

android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
|
  • 1
    Làm việc như một sự quyến rũ nhưng trong trường hợp của tôi, tôi phải làm như: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> false < / item> </ style> –  14:48:53 14/10/2015
60

thêm dòng này theo phong cách

    <item name="android:textAllCaps">false</item>

|
  • 1
    Tôi không biết tại sao họ sẽ thực hiện điều này DEFAULT –  00:39:27 09/03/2016
  • 1
    Đây là mặc định trong chủ đề vật chất, vì nó phù hợp với tính chất của vật liệu thiết kế –  08:32:21 19/03/2016
  • 1
    người nghèo bị mắc kẹt trong hộp vuông của vật liệu thiết kế –  22:48:50 02/07/2019
38

cái này đang hoạt động .... chỉ trong mã của bạn ở mã dưới cùng của bạn thêm cái này:

android:textAllCaps="false"

nó sẽ hủy kích hoạt chữ cái viết hoa mà U đang cố gõ nhỏ.

|
33

Mặc định của Lollipop đi kèm với "textAllCaps true", vì vậy bạn phải biến nó thành false theo cách thủ công

|
  • 1
    Thật tuyệt khi biết. Nếu có một trang web liệt kê tất cả các giá trị mặc định này cho mỗi phiên bản Android? –  18:05:35 08/01/2015
25

Thêm android: textAllCaps = "false" vào <Button>thẻ là xong.

|
23

Sử dụng dòng này android: textAllCaps = "false" trong xml của bạn

<Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/login_str"
            android:background="@color/colorBlue"
            android:textColor="@color/colorWhite"
            android:textAllCaps="false"
           />
|
20

Có một cách dễ dàng hơn phù hợp với tất cả các nút, chỉ cần thay đổi giao diện của các nút trong chủ đề của bạn, hãy thử cách này:

trong giá trị-21 / styles.xml

<resources>
    <style name="myBaseTheme"
        parent="@android:style/Theme.Material.Light">
        <item name="android:colorPrimary">@color/bg</item>
        <item name="android:colorPrimaryDark">@color/bg_p</item>
        <item name="android:textAppearanceButton">@style/textAppearanceButton</item>
    </style>

    <style name="textAppearanceButton" parent="@android:style/TextAppearance.Material.Widget.Button">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>

Tái bút: bạn nên tuân theo các nguyên tắc của material design, bạn nên hiển thị văn bản viết hoa trong Buttons, http://www.google.com/design/spec/components/buttons.html

|
  • 1
    Tôi đồng ý, đó là tuyệt vời để làm theo hướng dẫn thiết kế ... cho đến khi văn bản nút phù hợp không còn nút –  11:24:39 28/09/2015
  • 1
    google nên ngừng nói về phong cách - tôi đã không biết rằng có những người ppl khóc và nức nở trên đường phố vì các nút viết thường! –  17:55:54 02/11/2016
17

Java:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

Phong cách:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/yourButtonStyle</item>
    </style>

    <style name="yourButtonStyle" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

Trong bố cục:

   <Button
      .
      .
      style="@style/yourButtonStyle"
      .
      .
   />
|
12

Sử dụng android.support.v7.widget.AppCompatButton trong bố cục XML sẽ cho phép bạn tránh phải có bố cục-21 hoặc thay đổi bất kỳ thứ gì theo chương trình. Đương nhiên điều này cũng sẽ hoạt động với thư viện AppCompat v7.

<android.support.v7.widget.AppCompatButton
    android:id="@+id/btnOpenMainDemo"
    android:textAllCaps="false"
    style="@style/HGButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_main_demo"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"/>

Hi vọng điêu nay co ich.

|
12

Bạn có thể thêm android:textAllCaps="false"vào nút.

Văn bản nút có thể được chuyển thành chữ hoa theo chủ đề của ứng dụng, áp dụng cho tất cả các nút. Kiểm tra các tệp chủ đề / kiểu để thiết lập thuộc tính android:textAllCaps.

|
10

Trong Android Studio IDE, bạn phải nhấp vào biểu tượng Bộ lọc để hiển thị các thuộc tính của chuyên gia. Sau đó, bạn sẽ thấy textAllCapstài sản. Kiểm tra nó, sau đó bỏ chọn nó.

|
4

Nếu bạn đến đây vì văn bản nút facebook của bạn xuất hiện bằng chữ hoa thì chỉ cần thêm nó android:textAllCaps="false"vào tệp xml của bạn. Nó đã làm việc cho tôi.

|
2

Theo mặc định, Button trong android cung cấp tất cả từ khóa mũ. Nếu bạn muốn văn bản nút ở dạng chữ thường hoặc chữ hoa hỗn hợp, bạn có thể tắt textAllCapscờ bằng cách sử dụngandroid:textAllCaps="false"

|
2

Nếu bạn sử dụng appcompat-v7, bạn có thể phân lớp AppCompatButtonsetSupportAllCaps(false)sau đó sử dụng lớp này cho tất cả các nút của bạn.

/**
 * Light extension of {@link AppCompatButton} that overrides ALL CAPS transformation
 */
public class Button extends AppCompatButton {
    public Button(Context context, AttributeSet attrs) {
        super(context, attrs);
        setSupportAllCaps(false);
    }

    public Button(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setSupportAllCaps(false);
    }
}

Xem tài liệu Android AppCompatButton # setSupportAllCaps (boolean) .

|
2

OK, chỉ cần chạy vào điều này. Các nút trong Lollipop xuất hiện toàn bộ chữ hoa VÀ phông chữ đặt lại thành 'bình thường'. Nhưng trong trường hợp của tôi (Android 5.02), nó hoạt động ở một bố cục chính xác, chứ không phải bố cục khác !?

Thay đổi API không hoạt động.
Đặt thành tất cả chữ hoa yêu cầu tối thiểu API 14 và phông chữ vẫn đặt lại thành 'bình thường'.

Đó là bởi vì Kiểu vật liệu của Android buộc phải thay đổi các kiểu nếu không có kiểu nào được xác định (đó là lý do tại sao nó hoạt động trong một trong các bố cục của tôi chứ không phải kiểu khác vì tôi đã xác định một kiểu).

Vì vậy, cách khắc phục dễ dàng là xác định một kiểu trong tệp kê khai cho mỗi hoạt động mà trong trường hợp của tôi chỉ là:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(hy vọng điều này sẽ giúp ai đó, có thể đã cứu tôi một vài trong số giờ đêm qua)

|
  • 1
    Đó là một nỗ lực rất tệ, chỉ cần tạo kiểu cho các nút của bạn, một trong các giá trị-21 có allCaps false. Việc quay trở lại một chủ đề cũ hơn (ở đây là Chủ đề Holo) khiến ứng dụng của bạn trở nên xấu hơn và không phù hợp hơn với người dùng. –  21:30:11 14/03/2015
0

Một giải pháp thay thế Kotlin có lập trình khác:

mButton.transformationMethod = null

|
0

Tôi không biết tại sao câu trả lời của @ user1010160 nhận được xếp hạng là 0. Tôi sẽ cho nó +1 nếu tôi có đủ danh tiếng.

Vì ứng dụng của tôi được thiết kế cho API nhỏ hơn 14 và tôi không muốn thêm mã vào chương trình của mình nên tôi đã không tìm ra giải pháp cho đến khi tôi đọc câu trả lời của anh ấy. Những gì anh ấy nói là mặc dù bạn đã làm những gì cần thiết trong các Kiểu ứng dụng, nó sẽ không hoạt động trừ khi bạn thêm một kiểu vào hoạt động của mình và ở đó bạn đặt textAllCaps thành false.

Không đủ để có một kiểu cho hoạt động (hoạt động của tôi có một kiểu), vì kiểu đó có thể mặc định cho thuộc tính AllCaps. Bạn phải đặt rõ ràng, trong hoạt động, thuộc tính đó thành false.

Bây giờ tôi có nó cả trong Ứng dụng và trong phần Hoạt động của tệp kê khai.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.