È davvero molto deludente non poterlo fare con styles ( <item name="android:textAllCaps">true</item>
) o su ogni file di layout XML con l' attributo textAllCaps e l'unico modo per farlo è in realtà utilizzare theString.toUpperCase () su ciascuna stringa quando lo fai un textViewXXX.setText (theString).
Nel mio caso, non volevo avere theString.toUpperCase () ovunque nel mio codice, ma avere un posto centralizzato per farlo perché avevo alcune attività ed elenca layout di elementi con TextViews che dovevano essere maiuscoli per tutto il tempo (un titolo) e altri che non ... quindi ... alcune persone potrebbero pensare che sia eccessivo, ma ho creato la mia classe CapitalizedTextView estendendo android.widget.TextView e sovrascrivendo il metodo setText capitalizzando il testo al volo.
Almeno, se il design cambia o devo rimuovere il testo in maiuscolo nelle versioni future, devo solo passare a TextView normale nei file di layout.
Ora, prendi in considerazione che l'ho fatto perché il Designer dell'App voleva davvero questo testo (i titoli) in CAPS su tutta l'App, indipendentemente dalla capitalizzazione del contenuto originale, e avevo anche altre normali TextView in cui la capitalizzazione arrivava con il contenuto effettivo .
Questa è la classe:
package com.realactionsoft.android.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import android.widget.TextView;
public class CapitalizedTextView extends TextView implements ViewTreeObserver.OnPreDrawListener {
public CapitalizedTextView(Context context) {
super(context);
}
public CapitalizedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CapitalizedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text.toString().toUpperCase(), type);
}
}
E ogni volta che devi usarlo, dichiaralo con tutto il pacchetto nel layout XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Alcuni sosterranno che il modo corretto di dare uno stile al testo su un oggetto TextView è usare uno SpannableString , ma penso che sarebbe un eccesso eccessivo, per non parlare del consumo di risorse maggiore, perché si crea un'istanza di un'altra classe rispetto a TextView.