2013-02-22 15 views
19

Sto creando una TextView a livello di codice. C'è un modo in cui posso impostare lo stile di questo TextView? Qualcosa di simile aCome si imposta lo stile di una TextView a livello di programmazione?

style="@android:style/TextAppearance.DeviceDefault.Small" 

che userei se avessi un file layout.xml.

+0

non è possibile impostare lo stile di qualsiasi vista in modo pragmatico. ma puoi impostare le singole proprietà della vista –

+0

Possibile duplicato di [Android - imposta TextView TextStyle a livello di codice?] (http://stackoverflow.com/questions/7919173/android-set-textview-textstyle-programmatically) –

risposta

34

Non è possibile impostare a livello di codice lo stile di una vista, ma è possibile che si possa fare qualcosa come textView.setTextAppearance(context, android.R.style.TextAppearance_Small);.

+0

Questo metodo è contrassegnato come deprecato. – pkuszewski

+7

Usa 'if (Build.VERSION.SDK_INT <23) { textView.setTextAppearance (context, android.R.style.TextAppearance_Small); } else { textView.setTextAppearance (android.R.style.TextAppearance_Small); } ' – Nedko

27

Attualmente non è possibile impostare lo stile di una vista in modo programmatico.

Per aggirare il problema è possibile creare un file XML di layout del modello con lo stile assegnato, per esempio in res/layout creare tvtemplate.xml come con il seguente contenuto:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="This is a template" 
     style="@android:style/TextAppearance.DeviceDefault.Small" /> 

poi gonfiare questo per istanziare la nuova TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null); 
+1

Mi piace questa soluzione meglio della risposta accettata in quanto supporta lo stile come richiesto dall'OP (e volevo). Inoltre, sembra sempre così .... sbagliato .... usare un costruttore di android.widget. –

1

per le viste generate in fase di esecuzione (in codice) si può passare stile al costruttore: View(Context, AttributeSet, int)

In altri casi si deve chiamare varios metodi per modificare saputo ritrovare

4

Prova questa

textview.setTextAppearance(context, R.style.yourstyle); 

questo potrebbe non funzionare provare Creare un xml con il textview come questo

textviewstyle.xml 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     style="@android:style/TextAppearance.DeviceDefault.Small" /> 

Per ottenere lo stile desiderato gonfiare il XML che contiene TextView

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null); 
3

In realtà, questo è possibile al livello API 21.

TextView ha un 4 parameter constructor:

TextView (Context context, 
      AttributeSet attrs, 
      int defStyleAttr, 
      int defStyleRes) 

mezzo due i parametri non sono necessari in questo caso. Il codice seguente crea un TextView direttamente in un'attività e definisce solo la sua risorsa stile:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style); 
0
@Deprecated 
public void setTextAppearance(Context context, @StyleRes int resId) 

questo metodo è deprecato come di Android SKD 23.

è possibile utilizzare la versione sicura:

if (Build.VERSION.SDK_INT < 23) { 
    super.setTextAppearance(context, resId); 
} else { 
    super.setTextAppearance(resId); 
}