Preferencias personalizadasCategorías
Tengo una pantalla de preferencias simple definida como esta
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Security"> <CheckBoxPreference android:title="Require Pin on Start" android:summary="Require pin to run the application" android:key="@string/pref_require_pin" android:defaultValue="false" /> </PreferenceCategory> <PreferenceCategory android:title="Settings"> <ListPreference android:title="History Age (in days)" android:summary="Display items up to 30 days old" android:key="@string/pref_history_days" android:defaultValue="30" android:entries="@array/days_list" android:entryValues="@array/days_list" android:dialogTitle="Select History Age"/> </PreferenceCategory> </PreferenceScreen>
Ya tengo una configuración de estilo y la utilizo en otra parte de mi aplicación.
- No se puede establecer la preferencia con PreferenceActivity
- Usar getSupportFragmentManager () Dentro de PreferenceActivity
- Cómo cargar la misma preferencia de pantalla en el detalle PreferenceFragment
- ¿Cómo referenciar o "encontrar" una PreferenceActivity?
- Android - Categorías de encabezados en PreferenceActivity con PreferenceFragment
<style name="ListHeader"> <item name="android:textColor">#000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">12sp</item> <item name="android:background">#cccccc</item> <item name="android:paddingTop">6px</item> <item name="android:paddingBottom">6px</item> <item name="android:paddingLeft">12px</item> </style>
Y aquí está mi actividad
public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preferences); } }
¿Cómo puedo aplicar mi estilo personalizado al encabezado PreferenceCategory
?
- Abrir WebView no navegador de preferenciaScreen Android
- No puedo averiguar cómo usar un android PreferenciaActividad
- ¿Es posible combinar un EditTextPreference con un CheckBoxPreference?
- Establecer indicadores de intención para PreferenceScreen en xml
- El botón de retroceso de Android no vuelve a la actividad anterior
- Preferencias de Android y fragmentos de diálogo
- Compatibilidad del edificio PreferenceFragment en Android
- Establecer la fuente personalizada para el texto en PreferenceScreen
Usted debe echar un vistazo a Preference.Category
estilo:
<style name="Preference.Category"> <item name="android:layout">@android:layout/preference_category</item> <item name="android:shouldDisableView">false</item> <item name="android:selectable">false</item> </style>
Echemos un vistazo al archivo preference_category.xml
:
<!-- Layout used for PreferenceCategory in a PreferenceActivity. --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" style="?android:attr/listSeparatorTextViewStyle" android:id="@+android:id/title" />
Por lo tanto, necesita crear un tema personalizado que extienda el tema predeterminado de Android y sustituya el valor de ListHeader
con el estilo de ListHeader
. A continuación, aplique este tema a Actividad que amplíe PreferenceActivity
.
Aquí sabrás como podrás hacerlo.
Primero , en tu styles.xml
agrega el siguiente código:
<style name="PreferenceListHeader" parent="@android:style/Widget.TextView.ListSeparator"> <item name="android:textColor">#000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">12sp</item> <item name="android:background">#cccccc</item> <item name="android:paddingTop">6px</item> <item name="android:paddingBottom">6px</item> <item name="android:paddingLeft">12px</item> </style> <style name="Theme.Custom" parent="@android:style/Theme"> <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item> </style>
A continuación, en su AndroidManifest.xml
añadir tema a su preferencia acitivity:
<activity android:name=".MyPreferencesActivity" android:theme="@style/Theme.Custom" ... > ... </activity>
Aquí hay una captura de pantalla:
@inazaruk dio la respuesta bastante bien, pero desde las últimas actualizaciones, ADT 18 and above
, hay algunas restricciones sobre los styles
dan el error
Error retrieving parent for item: No resource found that matches the given name '@android:style/Widget.TextView.ListSeparator'.
Vea este enlace por la razón del problema y la solución . Dado que este post no proporciona un código para la comprensión estoy proporcionando mi código aquí
<style name="Widget.TextView.ListSeparator" parent="@android:style/Widget.TextView"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textStyle">bold</item> <item name="android:textSize">14sp</item> <item name="android:gravity">center_vertical</item> </style> <style name="PreferenceListHeader" parent="Widget.TextView.ListSeparator"> <item name="android:textColor">#000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">18sp</item> <item name="android:background">#cccccc</item> <item name="android:paddingTop">6dp</item> <item name="android:paddingBottom">6dp</item> <item name="android:paddingLeft">12dp</item> </style> <style name="PreferenceScreen" parent="android:Theme.NoTitleBar"> <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item> <item name="android:background">#F2B1DBF3</item> </style>
Estilizarlo como se describe en la respuesta de inazaruk es bastante simple, pero sólo cambia el estilo del texto en el encabezado, no ofrece una manera de especificar un nuevo diseño completo (el estilo no aplicará el elemento de layout
). Sin embargo, hay una solución sencilla si amplía la clase:
public class MyPreferenceCategory extends PreferenceCategory { public MyPreferenceCategory(Context context) { super(context); setLayoutResource(R.layout.yourlayout); } public MyPreferenceCategory(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.yourlayout); } }
Y simplemente use esto en lugar de la categoría de PreferenceCategory
original al definir su diseño de preferencias.
Su diseño puede, por supuesto, tener lo que quiera, incluyendo líneas por encima o por debajo del texto, fondos diferentes, relleno, lo que sea. Por ejemplo, esto mostrará un subtítulo de color de diseño de material con una línea arriba:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="6dp" android:background="?attr/divider_color" /> <TextView android:id="@+android:id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="12dp" android:textColor="?attr/colorAccent" android:textSize="14sp" android:textStyle="bold" /> </LinearLayout>
Al igual que la respuesta de Gábor, pero en lugar de extender la categoría de preferencias, puedes hacer lo siguiente: 1. Haz tu diseño personalizado. Lo nombré preferencia_categoría.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="6dp" android:background="?attr/divider_color" /> <TextView android:id="@+android:id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="12dp" android:textColor="?attr/colorAccent" android:textSize="14sp" android:textStyle="bold" /> </LinearLayout>
Importante: el diseño debe contener una vista de texto con este identificador: android: id = "@ + android: id / title"
2.y en la preferencia agregue esta línea: android: layout = "@ layout / preference_category"
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:key="Font_Settings" android:title="@string/UISetting" android:layout="@layout/preference_category" > ... // other preferences in the category </PreferenceCategory> </PreferenceScreen>
- Cómo convertir MatOfPoint a MatOfPoint2f en opencv java api
- Android: Cómo rellenar una vista de lista con elementos de matriz