tutoriales studio reales proyectos programacion introducción incluye guia fuente desarrollo código aplicaciones android android-preferences android-theme

reales - proyectos android studio pdf



Color de texto de fragmento de preferencia Android (8)

Acabo de encontrar una respuesta que hace el trabajo.

Este archivo es el diseño predeterminado para el elemento de la lista de preferencias:

<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2006 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Layout for a Preference in a PreferenceActivity. The Preference is able to place a specific widget for its particular type in the "widget_frame" layout. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical" android:paddingRight="?android:attr/scrollbarSize" android:background="?android:attr/selectableItemBackground" > <ImageView android:id="@+android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dip" android:layout_marginRight="6dip" android:layout_marginTop="6dip" android:layout_marginBottom="6dip" android:layout_weight="1"> <TextView android:id="@+android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" android:ellipsize="marquee" android:fadingEdge="horizontal" /> <TextView android:id="@+android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignLeft="@android:id/title" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?android:attr/textColorSecondary" android:maxLines="4" /> </RelativeLayout> <!-- Preference should place its actual preference widget here. --> <LinearLayout android:id="@+android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="vertical" /> </LinearLayout>

Puedes usarlo como base y crear tu propio diseño personalizado. Este diseño debe ser aplicado dentro de cada preferencia como esta.

<Preference android:key="somekey" android:title="Title" android:summary="Summary" android:layout="@layout/custom_preference_layout"/>

Puede cambiar todo el diseño fuera de la lista, solo necesita tener un archivo de diseño que contenga una vista de lista donde se rellenarán las preferencias de esta manera:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Something" /> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>

Para anular el diseño predeterminado de PreferenceFragment , anule el método onCreateView y cambie la vista inflada:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.custom_options_layout, null); }

Basado en estas respuestas:

Creación de un diseño personalizado para las preferencias

Cómo agregar un botón a PreferenceScreen

Android: ¿Cómo ajustar Margen / Relleno en Preferencia?

Quiero cambiar el color del texto en el fragmento de preferencias de Android. Actualmente estoy usando un tema personalizado para cambiar la imagen de la casilla de verificación, el fondo, el clic en el resaltado y todo funciona muy bien ... además del color del texto. No quiero usar un tema por defecto, quiero tener mi propio tema para que se vea como quiero, pero solo cambie el color del texto, ¿alguien puede ayudar?

styles.xml

<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="selectedTextStyle"> <item name="android:textSize">18sp</item> </style> <style name="buttonTextStyle"> <item name="android:textSize">20sp</item> </style> <style name="PreferencesTheme" > <item name="android:windowBackground">@drawable/lists_background</item> <item name="android:listViewStyle">@style/listViewPrefs</item> <item name="android:checkboxStyle">@style/MyCheckbox</item> </style> <style name="MyTextAppearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@color/black</item> </style> <style name="listViewPrefs" parent="@android:Widget.ListView"> <item name="android:listSelector">@layout/list_selector_master</item> <item name="android:textAppearance">@style/MyTextAppearance</item> </style> <style name="MyCheckbox" parent="android:Widget.CompoundButton.CheckBox"> <item name="android:button">@drawable/btn_check</item> </style> </resources>

Manifiesto:

<activity android:name="com.package.SettingsActivity" android:theme="@style/PreferencesTheme" android:configChanges="keyboard|orientation" > </activity>

Actividad:

import android.app.Activity; import android.os.Bundle; import android.preference.PreferenceFragment; public class SettingsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit(); } public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } } }


Aquí están los dos objetos TextView de preference.xml (diseño para una Preference ):

<TextView android:id="@+android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" android:ellipsize="marquee" android:fadingEdge="horizontal" /> <TextView android:id="@+android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignLeft="@android:id/title" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?android:attr/textColorSecondary" android:maxLines="4" />

Así que parece que puedes anular textAppearanceLarge y textColorSecondary en tu tema para lograr un cambio de color. Aquí hay un ejemplo:

<style name="AppTheme"> <item name="android:textAppearanceLarge">@style/MyTextAppearance</item> <item name="android:checkboxStyle">@style/MyCheckBox</item> </style> <style name="MyCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"> <item name="android:button">@android:drawable/btn_star</item> </style> <style name="MyTextAppearance" parent="@android:style/TextAppearance.Large"> <item name="android:textColor">#ff0000</item> </style>


Creo que una manera fácil y clara de hacerlo es la siguiente:

res / values ​​/ styles.xml

<style name="SettingsFragmentStyle"> <item name="android:textColorSecondary">#222</item> <item name="android:textColor">#CCC</item> <item name="android:background">#999</item> ... </style>

En la actividad que contiene la subclase PreferenceFragment dentro de onCreate:

setTheme(R.style.SettingsFragmentStyle);


No tengo la reputación suficiente para comentar o mejorar, pero solo quería agregar la sugerencia de mharper sobre TextAppearanceMedium también funcionó para cambiar el color del texto. Si alguien sabe por qué esto es así, explícalo.

Así que solo ajusta la respuesta aceptada así:

<style name="AppTheme"> <item name="android:textAppearanceMedium">@style/MyTextAppearance</item> </style> <style name="MyTextAppearance" parent="@android:style/TextAppearance.Medium"> <item name="android:textColor">#ff0000</item> </style>

Al menos, si nadie puede explicar por qué es esto, podría evitar que alguien tenga la misma dificultad que yo intenté cambiar el color del texto.


Para mí nada de los métodos anteriores no funcionó. Terminé extendiendo la clase de Prefernces del tipo que usé, en mi caso CheckBoxPrefernces:

public class MyPreferenceCheckBox extends CheckBoxPreference { public MyPreferenceCheckBox(Context context) { super(context); } public MyPreferenceCheckBox(Context context, AttributeSet attrs) { super(context, attrs); } public MyPreferenceCheckBox(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected View onCreateView(ViewGroup parent) { ViewGroup root = (ViewGroup) super.onCreateView(parent); ((TextView)root.findViewById(android.R.id.title)).setTextColor(parent.getResources().getColor(R.color.red)); ((TextView)root.findViewById(android.R.id.summary)).setTextColor(parent.getResources().getColor(R.color.red)); return root; } }

Y el uso en el prefs.xml:

<com.my.package.name.MyPreferenceCheckBox android:title="@string/my_title" android:defaultValue="true" android:key="@string/my_key" android:summary="On/Off" />

Esta answer me mostró ese camino:


Pude cambiar el color del texto en PreferenceFragment con esto:

styles.xml

<resources> <style name="SettingsTheme" parent="android:Theme.Holo"> <item name="android:textColorPrimary">@color/light_blue_font_color</item> <item name="android:textColorSecondary">@color/white_font_color</item> <item name="android:textColorTertiary">@color/white_font_color</item> </style> </resources>

colores.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="light_blue_font_color">#33b5e5 </color> <color name="white_font_color">#ffffff </color> </resources>

AndroidManifest.xml

<activity android:name="xx.yy.zz.SettingsActivity" android:theme="@style/SettingsTheme" > </activity>


Si está utilizando la biblioteca compat, simplemente agregue:

<item name="colorAccent">#ff0000</item>

a tu estilo


Trabajo con min API 11 y compilo con 23. establecer tema y luego establecer fondo para este tema. Si trabajas con> API 14 puedes usar Theme_DeviceDefault.

Esta es la solución más simple que encuentro:

public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActivity().setTheme(android.R.style.Theme_Holo); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.settings); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if(view != null){ view.setBackgroundColor(ContextCompat.getColor(getActivity(), android.R.color.background_dark)); } } }