Ich möchte in der Lage sein, einem XML-Attribut oder -Stil ein XML-Attribut oder einen XML-Stil zuzuweisen TextView
, der den Text in ALLEN GROSSBUCHSTABEN enthält.
Die Attribute android:inputType="textCapCharacters"
und android:capitalize="characters"
tun nichts und sehen so aus, als wären sie für vom Benutzer eingegebenen Text, nicht für a TextView
.
Ich möchte dies tun, damit ich den Stil vom Inhalt trennen kann. Ich weiß, dass ich dies programmgesteuert tun kann, aber ich möchte wieder Stil aus dem Inhalt und dem Code heraushalten.
android
textview
capitalization
CottonBallPaws
quelle
quelle
Antworten:
Ich dachte, das war eine ziemlich vernünftige Anfrage, aber es sieht so aus, als ob Sie es derzeit nicht tun können. Was für ein Totalausfall. lol
Aktualisieren
Sie können jetzt textAllCaps verwenden , um alle Caps zu erzwingen.
quelle
textAllCaps
Ursachen zum Absturz App , wenn Sie festgelegtandroid:fontFamily
inthemes.xml
.Was ist mit Android: TextAllCaps ?
quelle
Durch die Verwendung von AppCompat
textAllCaps
in Android Apps, die ältere APIs unterstützen (weniger als 14)Im Lieferumfang von AppCompat ist ein UI-Widget mit dem Namen CompatTextView enthalten, eine benutzerdefinierte TextView-Erweiterung, die die Unterstützung von textAllCaps hinzufügt
Für neuere Android API> 14 können Sie verwenden:
Ein einfaches Beispiel:
Quelle: developer.android
Aktualisieren:
quelle
CompatTextView
wird verwendet, inScrollingTabCointainerView
der verwendet wirdToolbarWidgetWrapper
, was ziemlich neu klingt und Solange der Name "v7" in seinem Namen behält, ist dies eine gute Garantie für mich, dassCompatTextView
er dort bleiben wird, wo er ist.CompatTextView
wurdeAppCompatTextView
in der neuesten Appcompat-v7-Bibliothek durch ersetzt. Du warst ganz richtig.Es ist wirklich sehr enttäuschend, dass Sie dies nicht mit styles (
<item name="android:textAllCaps">true</item>
) oder in jeder XML-Layoutdatei mit dem textAllCaps- Attribut tun können. Die einzige Möglichkeit, dies zu tun, besteht darin, theString.toUpperCase () für jede der Zeichenfolgen zu verwenden, wenn Sie dies tun ein textViewXXX.setText (theString).In meinem Fall wollte ich theString.toUpperCase () nicht überall in meinem Code haben, sondern einen zentralen Ort dafür haben, da ich einige Aktivitäten hatte und Elementlayouts mit TextViews auflistete, die die ganze Zeit groß geschrieben werden sollten (a title) und andere, die dies nicht getan haben ... also ... einige Leute denken vielleicht, dass dies ein Overkill ist, aber ich habe meine eigene CapitalizedTextView-Klasse erstellt, die android.widget.TextView erweitert, und die setText-Methode überschrieben, die den Text im laufenden Betrieb großschreibt.
Zumindest wenn sich das Design ändert oder ich den großgeschriebenen Text in zukünftigen Versionen entfernen muss, muss ich nur in den Layoutdateien zu normaler Textansicht wechseln.
Bedenken Sie nun, dass ich dies getan habe, weil der Designer der App diesen Text (die Titel) tatsächlich in CAPS in der gesamten App haben wollte, unabhängig von der ursprünglichen Großschreibung des Inhalts, und ich hatte auch andere normale TextViews, bei denen die Großschreibung mit dem tatsächlichen Inhalt kam .
Das ist die Klasse:
Und wann immer Sie es verwenden müssen, deklarieren Sie es einfach mit dem gesamten Paket im XML-Layout:
Einige werden argumentieren, dass die richtige Art, Text in einer TextView zu formatieren , die Verwendung eines SpannableString ist , aber ich denke, das wäre ein noch größerer Overkill, ganz zu schweigen von einem höheren Ressourcenverbrauch, da Sie eine andere Klasse als TextView instanziieren.
quelle
Ich habe eine Lösung gefunden, die der von RacZo insofern ähnlich ist, als ich auch eine Unterklasse erstellt habe,
TextView
deren Handles den Text in Großbuchstaben schreiben .Der Unterschied besteht darin, dass
setText()
ich , anstatt eine der Methoden zu überschreiben , einen ähnlichen AnsatzTextView
wie bei API 14+ verwendet habe (was aus meiner Sicht eine sauberere Lösung darstellt).Wenn Sie sich die Quelle ansehen , sehen Sie die Implementierung von
setAllCaps()
:Die
AllCapsTransformationMethod
Klasse ist (derzeit) nicht öffentlich, aber die Quelle ist auch verfügbar . Ich habe diese Klasse ein wenig vereinfacht (diesetLengthChangesAllowed()
Methode entfernt), daher lautet die vollständige Lösung wie folgt:quelle
Anscheinend gibt es eine Berechtigung für die Einstellung der mobilen Tastatur. Der einfachste Weg, dies zu tun, ist:
hoffe das wird klappen
quelle
Mit dem PixlUI- Projekt können Sie textAllCaps in jeder Textansicht oder Unterklasse der Textansicht verwenden, einschließlich: Schaltfläche, EditText AutoCompleteEditText-Kontrollkästchen RadioButton und mehreren anderen.
Sie müssen Ihre Textansichten mit der Pixlui-Version und nicht mit denen aus der Android-Quelle erstellen. Dies bedeutet, dass Sie Folgendes tun müssen:
Mit PixlUI können Sie auch eine benutzerdefinierte Schriftart festlegen, die Sie in Ihrem Assets-Ordner ablegen.
Ich arbeite an einer Gradle- Abzweigung des PixlUI-Frameworks, die gradle verwendet und es ermöglicht, textAllCaps sowie die Schriftart aus Stilen anzugeben, anstatt sie wie im ursprünglichen Projekt inline zu benötigen.
quelle