Chciałbym móc przypisać atrybut lub styl xml do TextView
tego, który utworzy dowolny tekst we WSZYSTKICH LITERACH.
Atrybuty android:inputType="textCapCharacters"
i android:capitalize="characters"
nic nie robią i wyglądają tak, jakby były dla tekstu wprowadzonego przez użytkownika, a nie TextView
.
Chciałbym to zrobić, aby oddzielić styl od treści. Wiem, że mógłbym to zrobić programowo, ale znów chcę zachować styl z dala od treści i kodu.
android
textview
capitalization
cottonBallPaws
źródło
źródło
Odpowiedzi:
Myślałem, że to dość rozsądna prośba, ale wygląda na to, że nie możesz tego zrobić w tej chwili. Co za totalna awaria. lol
Aktualizacja
Możesz teraz użyć textAllCaps do wymuszenia wszystkich wielkich liter .
źródło
textAllCaps
że powoduje awarię aplikacji, jeśli podałeśandroid:fontFamily
wthemes.xml
.Co z Androidem: textAllCaps ?
źródło
Za pomocą AppCompat
textAllCaps
w aplikacjach na Androida obsługujących starsze API (mniej niż 14)Istnieje jeden widżet interfejsu użytkownika dostarczany z AppCompat o nazwie CompatTextView to niestandardowe rozszerzenie TextView, które dodaje obsługę textAllCaps
W przypadku nowszego interfejsu API Androida> 14 możesz użyć:
Prosty przykład:
Źródło: developer.android
Aktualizacja:
źródło
CompatTextView
jest ono używane wScrollingTabCointainerView
którym jest używaneToolbarWidgetWrapper
, co brzmi całkiem nowe i tak długo, jak nazwa utrzymuje „v7” w nazwie, jest to dla mnie wystarczająco dobra gwarancja, żeCompatTextView
pozostanie tam, gdzie jest.CompatTextView
został zastąpiony przezAppCompatTextView
najnowszą bibliotekę appcompat-v7. Miałeś całkowitą rację.Bardzo rozczarowujące jest to, że nie można tego zrobić za pomocą styles (
<item name="android:textAllCaps">true</item>
) lub każdego pliku układu XML z atrybutem textAllCaps , a jedynym sposobem na to jest użycie metodyString.toUpperCase () na każdym z ciągów znaków, gdy to zrobisz textViewXXX.setText (theString).W moim przypadku nie chciałem mieć plikuString.toUpperCase () wszędzie w moim kodzie, ale mieć scentralizowane miejsce, aby to zrobić, ponieważ miałem pewne działania i wyświetlałem układy elementów za pomocą TextViews, które zawsze powinny być pisane wielkimi literami (a tytuł) i inni, którzy nie ... więc ... niektórzy mogą myśleć, że to przesada, ale stworzyłem własną klasę CapitalizedTextView rozszerzającą android.widget.TextView i przesłoniłem metodę setText pisanie wielkimi literami na bieżąco.
Przynajmniej jeśli projekt się zmieni lub będę musiał usunąć tekst pisany wielkimi literami w przyszłych wersjach, po prostu muszę przejść do normalnego TextView w plikach układu.
Teraz weź pod uwagę, że to zrobiłem, ponieważ projektant aplikacji tak naprawdę chciał tego tekstu (tytułów) w CAPS w całej aplikacji bez względu na oryginalną wielkość liter, a także miałem inne normalne TextViews, w których wielkie litery pochodziły z rzeczywistej treści .
To jest klasa:
I ilekroć musisz go użyć, po prostu zadeklaruj go z całym pakietem w układzie XML:
Niektórzy twierdzą, że poprawnym sposobem na stylizowanie tekstu w TextView jest użycie SpannableString , ale myślę, że byłaby to jeszcze większa nadwyżka, nie mówiąc już o większym zużyciu zasobów, ponieważ utworzysz instancję innej klasy niż TextView.
źródło
Wymyśliłem rozwiązanie podobne do RacZo, ponieważ stworzyłem również podklasę,
TextView
której uchwyty sprawiają, że tekst jest pisany wielkimi literami.Różnica polega na tym, że zamiast zastąpić jedną z
setText()
metod, zastosowałem podobne podejście do tego, coTextView
faktycznie robi w API 14+ (co jest moim zdaniem czystszym rozwiązaniem).Jeśli spojrzysz na źródło , zobaczysz implementację
setAllCaps()
:AllCapsTransformationMethod
Klasa nie jest (obecnie) publicznego, ale wciąż źródłem jest również dostępna . Uprościłem nieco tę klasę (usunąłemsetLengthChangesAllowed()
metodę), więc kompletne rozwiązanie jest następujące:źródło
Wygląda na to, że na klawiaturze telefonu jest zezwolenie, więc najłatwiej to zrobić:
mam nadzieję, że to zadziała
źródło
Projekt PixlUI pozwala na użycie textAllCaps w dowolnym widoku tekstowym lub podklasie widoku tekstowego, w tym: Button, EditText AutoCompleteEditText Checkbox RadioButton i kilka innych.
Będziesz musiał utworzyć swoje widoki tekstowe przy użyciu wersji pixlui zamiast tych ze źródła Android, co oznacza, że musisz to zrobić:
PixlUI pozwala również ustawić niestandardowy krój / czcionkę, który umieszczasz w folderze zasobów.
Pracuję nad rozwidleniem Gradle frameworku PixlUI, który wykorzystuje gradle i pozwala określić tekstAllCaps, a także krój pisma ze stylów, zamiast wymagać ich wstawiania tak, jak robi to oryginalny projekt.
źródło