webentwicklung-frage-antwort-db.com.de

Warum wird mein Schaltflächentext bei Lollipop zu ALL CAPS gezwungen?

In meiner App "Tide Now WA", die ich kürzlich mit dem neuen Nexus 9-Tablet (Lollipop-API 21) auf Kompatibilität getestet habe.

Es werden einige Schaltflächentexte geschrieben. Diese App schreibt den Text korrekt mit Android 2.3 und Android 4.0. Das heißt gemischte Groß- und Kleinschreibung.

Wenn dieselbe App auf meinem Nexus 9 ausgeführt wird, werden alle Buchstaben im Text in Großbuchstaben geschrieben.

FWIW mein Manifest enthält die folgende Aussage:

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

Kann ich das in meinem Code beheben oder ist es ein Fehler in der O.S. Vielen Dank

397
user1644002

Dies kann im Anwendungscode behoben werden, indem die Transformationsmethode der Schaltfläche festgelegt wird, z.

mButton.setTransformationMethod(null);
101
user1644002

Ich habe keine Ahnung, warum es passiert, aber es gibt drei unbedeutende Versuche:

  1. Verwenden Sie Android:textAllCaps="false" in Ihrem layout-v21

  2. Ändern Sie programmgesteuert die Transformationsmethode der Schaltfläche. mButton.setTransformationMethod(null);

  3. Überprüfen Sie Ihren Stil für Allcaps

Hinweis : public void setAllCaps(boolean allCaps), Android:textAllCaps sind verfügbar ab API-Version 14.

592

Folgendes habe ich in meiner Datei values ​​/ themes.xml getan

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

Stellen Sie Android ein: textAllCaps = "false". Wenn Sie einen AppCompat-Stil verwenden, stellen Sie sicher, dass textAllCaps vor dem Stil steht. Andernfalls wird der Stil überschrieben. Zum Beispiel:

Android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
63
Bob bobbington

füge diese Linie mit Stil hinzu

    <item name="Android:textAllCaps">false</item>
55
Ashish Chaugule

dieser funktioniert ... nur in deinem Code in deinem unteren Code füge diesen hinzu:

Android:textAllCaps="false"

es sollte den Großbuchstaben deaktivieren, den U versucht, klein zu schreiben.

35
parsa sarshar

Die Standardeinstellung für Lollipop ist "textAllCaps true", daher müssen Sie sie manuell auf "false" setzen

31
tharinduNA

Füge Android hinzu: textAllCaps = "false" im <Button> Tag das war's.

23

Es gibt eine einfachere Methode, die für alle Schaltflächen funktioniert. Ändern Sie einfach die Darstellung der Schaltflächen in Ihrem Thema. Versuchen Sie Folgendes:

in values-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: Es wird empfohlen, die Prinzipien des Materialdesigns zu befolgen. Sie sollten Text in Großbuchstaben in Schaltflächen anzeigen. http://www.google.com/design/spec/components/buttons.html

19
pedroca

Durch die Verwendung des Android.support.v7.widget.AppCompatButton im XML-Layout können Sie vermeiden, dass Sie ein Layout-21 benötigen oder programmgesteuert etwas ändern müssen. Dies funktioniert natürlich auch mit der AppCompat v7-Bibliothek.

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

Hoffe das hilft.

11
user2288580

Sie können der Schaltfläche Android:textAllCaps="false" hinzufügen.

Der Schaltflächentext wird möglicherweise durch das Thema Ihrer App in Großbuchstaben umgewandelt, das für alle Schaltflächen gilt. Überprüfen Sie die Designs/Stildateien, um das Attribut Android:textAllCaps festzulegen.

9
chakri Reddy

In Android Studio IDE müssen Sie auf das Filtersymbol klicken, um die Experteneigenschaften anzuzeigen. Dann sehen Sie die Eigenschaft textAllCaps. Überprüfen Sie es und deaktivieren Sie es dann.

8
wisbucky

Wenn Sie hier angekommen sind, weil Ihr Facebook-Schaltflächentext in Großbuchstaben angezeigt wird, fügen Sie einfach diesen Android:textAllCaps="false" in Ihre XML-Datei ein. Es hat bei mir funktioniert.

3
war_Hero

OK, bin nur darauf gestoßen. Schaltflächen in Lollipop werden in Großbuchstaben ausgegeben UND die Schriftart wird auf "normal" zurückgesetzt. Aber in meinem Fall (Android 5.02) funktionierte es in einem Layout korrekt, aber nicht in einem anderen !?

Das Ändern von APIs hat nicht funktioniert.
Für die Einstellung aller Großbuchstaben ist API 14 erforderlich, und die Schriftart wird weiterhin auf "normal" zurückgesetzt.

Es liegt daran, dass die Android Materialstile eine Änderung der Stile erzwingen, wenn keiner definiert ist (deshalb hat es in einem meiner Layouts funktioniert und nicht im anderen, weil ich einen Stil definiert habe). .

Die einfache Lösung besteht darin, einen Stil im Manifest für jede Aktivität zu definieren, die in meinem Fall nur Folgendes war:
Android: theme = "@ Android: style/Theme.NoTitleBar.Fullscreen"
(hoffe das hilft jemandem, hätte mir letzte Nacht ein paar Stunden gespart)

2
user1010160

Wenn Sie appcompat-v7 verwenden, können Sie AppCompatButton und setSupportAllCaps(false) in Unterklassen unterteilen und diese Klasse dann für alle Ihre Schaltflächen verwenden.

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

Siehe AppCompatButton # setSupportAllCaps (boolean) Android docs.

2
hidro

Standardmäßig enthält die Schaltfläche in Android das Schlüsselwort für alle Großbuchstaben. Wenn Sie möchten, dass der Text der Schaltfläche in Klein- oder Großbuchstaben geschrieben wird, können Sie das textAllCaps -Flag mit Android:textAllCaps="false" deaktivieren.

0
Reyaz Ahmad

Ich weiß nicht, warum die Antwort von @ user1010160 eine Bewertung von 0 erhalten hat. Ich hätte +1 gegeben, wenn ich genug Ruf gehabt hätte.

Da meine App für eine API unter 14 entwickelt wurde und ich meinem Programm keinen Code hinzufügen wollte, fand ich keine Lösung, bis ich seine Antwort gelesen hatte. Was er sagte, war, dass, obwohl Sie getan haben, was in den Anwendungsstilen benötigt wird, es nicht funktionieren wird, es sei denn, Sie fügen Ihrer Aktivität einen Stil hinzu und setzen dort textAllCaps auf false.

Es reicht nicht aus, einen Stil für die Aktivität zu haben (meine Aktivität hatte einen Stil), da der Stil möglicherweise standardmäßig die AllCaps-Eigenschaft hat. Sie müssen diese Eigenschaft auch in der Aktivität explizit auf false setzen.

Ich habe es jetzt sowohl in der Anwendung als auch in den Aktivitätsteilen der Manifestdatei.

0
Zvi