2013-04-29 16 views
45

Ho intenzione di implementare un LinearLayout in cui i campi di input vengono generati in modo programmatico in base al numero di campi della tabella del database.Impostazione TextView TextAppeareance Programmaticamente in Android

Sfortunatamente, quando sto cercando di impostare l'attributo: textApperance come textApperanceLarge nello TextView, non funziona. Di seguito è riportato il mio codice ...

for (int i = 0; i < selectedProducts; i++) { 

      premLayout[i] = new LinearLayout(this); 
      premLayout[i].setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
      premLayout[i].setOrientation(LinearLayout.HORIZONTAL); 
      premLayout[i].setGravity(Gravity.TOP); 

      premTextView[i] = new TextView(this); 
      premTextView[i].setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 
        2.0f)); 
      premTextView[i].setTextAppearance(this, android.R.attr.textAppearanceLarge); 

      premTextView[i].setText(premiumChannels.get(i)); 
      premTextView[i].setId(i + 600); 

      int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics()); 
      premTextView[i].setWidth(px); 

      premLayout[i].addView(premTextView[i]); 
+0

Non funzionando, presumo tu intendi che il testo è solo "di dimensioni normali"? – HalR

+0

la dimensione predefinita è TextAppearanceSmall ... ma voglio impostare ... TextAppearanceLarge. –

+0

stai costruendo il tuo attributo di aspetto del testo o stai usando da Android. nel tuo codice che stai usando da Android. – Unknown

risposta

153

Utilizzare in questo modo. Funzionerà.

textView.setTextAppearance(this, android.R.style.TextAppearance_Large); 

Oppure, poiché API 23, non è necessario passare un contesto. Quindi, si può semplicemente chiamare:

textView.setTextAppearance(android.R.style.TextAppearance_Large); 

Se si desidera supportare API 23 o superiore, così come inferiore, è possibile utilizzare il seguente metodo per semplificare il vostro compito. Utilizza il metodo riportato di seguito solo se hai già scelto API 23 o versioni successive. Se il targeting dell'API è inferiore a 23, il codice riportato sotto darà errore in quanto il nuovo metodo non era disponibile al suo interno.

public void setTextAppearance(Context context, int resId) { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
     super.setTextAppearance(context, resId); 
    } else { 
     super.setTextAppearance(resId); 
    } 
} 
+3

Grazie mille! Funziona ! quando dobbiamo usare android.R.attr.textAppearanceLarge invece di android.R.style.TextAppearance_Large? –

+0

@RajuGujarati: 'android.R.attr.textAppearanceLarge' è un attributo che imposta lo stile da utilizzare per il tema corrente. Puoi dargli qualsiasi valore quando usi un tema personalizzato. 'android.R.style.TextAppearance_Large' è uno stile e in questo caso è il valore impostato su attr, per il tema predefinito. – njzk2

+0

Questo metodo è stato dichiarato obsoleto nel livello API 23. Utilizzare setTextAppearance (int) invece in API 23+. – Sergii