2011-04-06 16 views

Respuesta

14

Supongo que usa una Actividad que extiende el PreferenceActivity. Puede usar el método setTheme para establecer un tema personalizado en su pantalla de preferencias. Simplemente defina uno en res/values/themes.xml.

Se vería así:

<?xml version="1.0" encoding="UTF-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="Theme.DarkText"> 
    <item name="android:textColor">#000000</item> 
    </style> 
</resources> 

Después la pusieron en su actividad:

setTheme(R.style.Theme_DarkText); 
+0

¿Qué ocurre si desea cambiar el color del texto * después de que * se haya construido el diseño? –

+0

@MarioB Este código puede cambiar el color del texto del título de las preferencias, excepto EditTextPreference. ¿Cuál es el nombre del atributo para el título de EditTextPreference (no el título del diálogo)? – shantanu

0

Tomé la idea de Udinic, pero mejoró un poco. Ahora es posible establecer el color de (en este caso) PreferenceCategory en cualquier momento, y no solo al inflar la vista.

¿Cómo hacerlo?

En primer lugar, crear su clase personalizada como este:

import android.content.Context; 
import android.preference.PreferenceCategory; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MyPreferenceCategory extends PreferenceCategory { 

private TextView categoryTitle; 

public PincardPreferenceCategory(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 


@Override 
protected View onCreateView(ViewGroup parent) { 
    categoryTitle = (TextView)super.onCreateView(parent); 
    return categoryTitle; 
} 


public void setBackgroundColor(int color) { 
    categoryTitle.setBackgroundColor(color); 
} 


public void setTextColor(int color) { 
    categoryTitle.setTextColor(color); 
} 

} 

Una vez que se hace esto, usted tiene que usarlo mientras se define su configuración en XML.

Después sólo hay que utilizar este bucle en su preferenceActivity java:

for (int i = 0; i < getListView().getCount(); i++) { 
     Object view = getListView().getItemAtPosition(i); 
     if (view instanceof PincardPreferenceCategory) { 
      ((PincardPreferenceCategory)view).setBackgroundColor(Color.BLUE); 
      ((PincardPreferenceCategory)view).setTextColor(Color.RED); 
     } 
    } 

Aquí es la idea. Puede hacerlo para cualquiera de sus configuraciones, y en cualquier momento. El diseño debe haberse cargado por completo antes de usar este código, porque de lo contrario, getListView(). GetCount() devolverá 0. No funcionaré si lo usa en onCreate para ejemplo. Si desea hacer eso al inicio, le sugiero que haga eso en el método onWindowFocusChanged.

+0

No funcionará cuando haya más elementos que la pantalla pueda caber, porque ListView implementa el reciclaje de vistas y no crea * todas * vistas –

Cuestiones relacionadas