ボタンのテキストがLollipopですべて大文字になるのはなぜですか?


447

新しいNexus 9タブレット(Lollipop-API 21)を使用して互換性を最近テストした私のアプリ"Tide Now WA"で。

ボタンのテキストを書き込みます。このアプリは、Android 2.3およびAndroid 4.0を使用してテキストを正しく書き込みます。つまり、大文字と小文字が混在しています。

同じアプリをNexus 9で実行すると、テキスト内のすべての文字が大文字になります。

FWIW私のマニフェストには、次のステートメントが含まれています。

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

これをコードで修正できますか、それともOSのバグですか?


大文字と小文字をどのように混ぜたかをコードで教えてください
N Sharma '16

これらは、<string name = "r1s1"> Seattle </ string>などの私のstrings.xmlで定義されています
user1644002

はい。21.正しくタイプするには早すぎる。申し訳ありません
user1644002

23
Material(またはAPI 21+のDeviceDefault)テーマを使用する場合、ボタンのテキストはデフォルトですべて大文字です。これは意図したとおりに機能しています。
alanv 2014年

回答:


636

なぜそれが起こっているのかはわかりませんが、3つの簡単な試みがあります。

  1. 使用android:textAllCaps="false"中にあなたのlayout-v21

  2. プログラムでボタンの変換方法を変更します。 mButton.setTransformationMethod(null);

  3. オールキャップスのスタイルをチェック

public void setAllCaps(boolean allCaps)android:textAllCapsある利用できる APIバージョン14から。


#1は違いを生みませんでした。#3のやり方がわからない、スタイルがない?#2を試しています。
user1644002 2014年

2
はい、これを追加します:btn [i] .setTransformationMethod(null); おかげで動作します
user1644002 2014年

2
私はニコラの答えを解決策として受け入れていますが、質問の他の部分を指摘したいのは、上記のコメントで理由を説明したalanvによって提供されたものです。
user1644002 2014年

1
textAllCaps XML属性がサポートされているのはAPI> 14のみであるため、私にとっても機能し、プログラムによる方法を使用しました。ありがとうございます。
patrickjason91 2015年

3
<item name="android:textAllCaps">false</item>は自分のスタイル定義で使用しました
Someone Somewhere '28

169

これが、values / themes.xmlで行ったことです

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

8
APIレベル14より前のサポートでは、を使用できます<item name="textAllCaps">false</item>
CommonsWare 2016年

これはWidget.AppCompat.Buttonにのみ適用されます。より一般的な答えは、以下のAshish Chauguleによって提供されます。つまり、テーマスタイルに<item name = "android:textAllCaps"> false </ item>を直接追加します。(もともとはボタンについて質問されていましたが、ボタンにallCapsが必要ない場合は、メニュー項目やアクションなどにも必要ない
でしょう

1
私のために働いていませんでした。私が次のbuttonStyleように変わったときに仕事になりましたandroid:buttonStyle
Vasily Kabunov

2
XML android:textAllCaps="false"(私はAndroid Studio 3.0を使用しています)
meyasir 2018

107

これは、ボタンのTransformationMethodを設定することにより、アプリケーションコードで修正できます。

mButton.setTransformationMethod(null);

Kotlinの場合、構文は次のとおりです。mButton.transformationMethod = null
Native_Mobile_Arch_Dev '23

66

android:textAllCaps = "false"を設定します。appcompatスタイルを使用している場合は、textAllCapsがスタイルの前に来るようにしてください。それ以外の場合、スタイルはそれをオーバーライドします。例えば:

android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"

魅力のように機能しましたが、私の場合、次のようにする必要がありました:<style name = "textAppearanceButton" parent = "@ android:style / TextAppearance.Material.Widget.Button"> <item name = "android:textAllCaps"> false < / item> </ style>
Vfleitao

58

この行をスタイルで追加

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


52
彼らがなぜこれをデフォルトにしたのかわからない
Glenn Maynard

5
これはマテリアルデザインの性質に合っているため、マテリアルテーマのデフォルトです
QAMAR '19

貧しい人々は材料設計の四角い箱の中で立ち往生
エリック

35

これは機能しています....一番下のコードのコードにこれを追加してください:

android:textAllCaps="false"

Uが小文字で入力しようとしている大文字の文字を無効にする必要があります。


32

Lollipopのデフォルトには「textAllCaps true」が付属しているため、手動でfalseにする必要があります


5
知ってよかったです。Androidバージョンごとにこれらのデフォルト値のすべてをリストするサイトがある場合はどうなりますか?
Adam


19

すべてのボタンで機能する簡単な方法があります。テーマのボタンの外観を変更するだけです。これを試してください。

値-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>

PS:マテリアルデザインの原則に従うことをお勧めします。http://www.google.com/design/spec/components/buttons.htmlのボタンに大文字のテキストを表示する必要があります。


2
同意します。ボタンのテキストがボタンに収まらなくなるまで、デザインガイドラインに従うのはすばらしいことです
誰かのどこか

グーグルはただスタイルについて話すのをやめるべきです-小文字のボタンのために通りで泣いていると泣いているのに気づいていませんでした!
bharal

11

XMLレイアウトでandroid.support.v7.widget.AppCompatButtonを使用すると、layout-21を作成したり、プログラムで何かを変更したりする必要がなくなります。もちろん、これは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"/>

お役に立てれば。


11

あなたのxmlでこの行android:textAllCaps = "false"を使用してください

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

9

Android Studio IDEでは、エキスパートプロパティを表示するには、フィルターアイコンをクリックする必要があります。その後、textAllCapsプロパティが表示されます。オンにしてからオフにします。


9

android:textAllCaps="false"ボタンに追加できます。

ボタンのテキストは、すべてのボタンに適用されるアプリのテーマによって大文字に変換される場合があります。属性の設定については、テーマ/スタイルファイルを確認してくださいandroid:textAllCaps


9

Java:

yourButton.setAllCaps(false);

コトリン:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

スタイル:

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

レイアウト:

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

4

Facebookボタンのテキストがすべて大文字で表示されているためにここに到着した場合は、これandroid:textAllCaps="false"をxmlファイルに追加してください。それは私のために働いた。


2

はい、これに遭遇しました。Lollipopのボタンがすべて大文字になり、フォントが「通常」にリセットされます。しかし、私の場合(Android 5.02)、あるレイアウトでは正しく機能しましたが、別のレイアウトでは機能しませんでした!?

APIの変更は機能しませんでした。
すべて大文字に設定するには最小API 14が必要であり、フォントは「通常」にリセットされます。

これは、Androidマテリアルスタイルが定義されていない場合、スタイルを強制的に変更するためです(スタイルが定義されているため、レイアウトの1つでは機能し、もう1つのレイアウトでは機能しません)。

したがって、簡単な修正は、私の場合は
android:theme = "@ android:style / Theme.NoTitleBar.Fullscreen" である各アクティビティのマニフェストにスタイルを定義することです
(これが誰かに役立つことを願って、カップルを助けてくれたでしょう)昨夜の時間)


4
これは非常に悪い試みです。allCapsがfalseである値21のボタンのスタイルを作成するだけです。古いテーマ(ここではHoloテーマ)にフォールバックすると、アプリが醜くなり、ユーザーにとっての一貫性が失われます。
bluewhile 2015年

2

を使用する場合appcompat-v7AppCompatButtonおよびをサブクラス化してsetSupportAllCaps(false)、すべてのボタンにこのクラスを使用できます。

/**
 * 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);
    }
}

AppCompatButton#setSupportAllCaps(boolean) Androidドキュメントを参照してください。


2

デフォルトでは、Androidのボタンはすべて大文字のキーワードを提供します。ボタンのテキストを小文字または大/小文字混合にする場合は、次を使用してtextAllCapsフラグを無効にできますandroid:textAllCaps="false"


0

@ user1010160の回答の評価が0になった理由はわかりません。十分な評判があれば、+ 1を付けたでしょう。

私のアプリは14未満のAPI用に設計されており、プログラムにコードを追加したくなかったので、彼の答えを読むまで解決策を見つけることができませんでした。彼が言ったことは、アプリケーションスタイルで必要なことを行っても、アクティビティにスタイルを追加し、textAllCapsをfalseに設定しない限り機能しないということです。

スタイルにはデフォルトでAllCapsプロパティが設定される場合があるため、アクティビティのスタイルを設定するだけでは不十分です(私のアクティビティにはスタイルがありました)。アクティビティでも、そのプロパティをfalseに明示的に設定する必要があります。

これで、マニフェストファイルのアプリケーション部分とアクティビティ部分の両方にあります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.