¿Cómo agregar efecto de rizado a las preferencias en android?
Estoy trabajando en la adición del efecto de la ondulación cuando la preferencia se toca (seleccionado). He personalizado mi preferencia extendiendo ListPreference
. He intentado fijar el efecto de la ondulación programmatically usando RippleDrawable
pero no veo la animación.
Aquí está mi clase de preferencia personalizada
- Touch feedback con RecyclerView y CardView
- Cómo crear efecto de rizo en un diseño sencillo
- Crear una ondulación dibujable sin transparencia
- Lollipop RippleDrawable vs Selector para Pre-Lollipop
- Android L's Ripple Effect - Touch Feedback para los botones - Uso de XML
public class CustomListPreference extends ListPreference { public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); } public CustomListPreference(Context context) { super(context); } @Override protected void onBindView(View view) { super.onBindView(view); setCustomStyle(view); } private void setCustomStyle(View view) { TextView titleView = (TextView) view.findViewById(android.R.id.title); titleView.setTypeface(InitActivity.TYPEFACE_REGULAR); TextView summary = (TextView) view.findViewById(android.R.id.summary); summary.setTypeface(InitActivity.TYPEFACE_REGULAR); //Setting the drawable here, but it doesn't work. RippleDrawable drawable = (RippleDrawable) getContext().getResources().getDrawable(R.drawable.my_ripple_background); view.setBackGround(drawable); } }
Mi configuración de preferencias
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- opens a subscreen of settings --> <com.abc.app.CustomListPreference android:defaultValue="1" android:entries="@array/sampleEntries" android:entryValues="@array/SampleEntryValues" android:key="some_preference" android:title="@string/some_preferences" /> <com.abc.app.CustomCheckboxPreference android... /> </PreferenceScreen>
Mi ondulación xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/light_black_overlay"> <!--#22000000--> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/background_light" /> </shape> </item> </ripple>
¿Estoy configurando la animación para la vista correcta? Cualquier idea es apreciada. Gracias.
- Cómo utilizar RippleDrawable programaticamente en código (no xml) con Android 5.0 Lollipop?
- Desactivar Ripple en ListView
- Android cómo hacer referencia a una nueva clase de la Ripple RippleDrawable
- RippleDrawable - Mostrar efecto de rizado por programación
- Cómo crear efecto de rizo para pre-lollipop
- Android Button Ripple en Lollipop y resaltar en pre lollipop
- Las ondulaciones no se muestran con selectableItemBackground como primer plano en un CardView con un dispositivo Android 5.0
- ¿Cómo manejar el efecto Ripple en 9-patch y CardView, y tener control sobre los estados del selector?
Este es un ejemplo completo mínimo para agregar un efecto de rizado personalizado a una clase que extiende ListPreference
. Acabo de hacer y probar esto con API 21 (5.0).
SettingsActivity (Actividad de lanzamiento)
public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); } }
Pref_general.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:defaultValue="true" android:key="example_checkbox" android:summary="a checkbox" android:title="Checkbox test" /> <!-- replace with com.abc.app.CustomListPreference in your case--> <com.timcastelijns.rippletest.CustomListPreference android:defaultValue="1" android:entries="@array/sampleEntries" android:entryValues="@array/SampleEntryValues" android:key="some_preference" android:title="test" /> </PreferenceScreen>
Arrays.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sampleEntries"> <item>1</item> <item>2</item> <item>3</item> </string-array> <string-array name="SampleEntryValues"> <item>4</item> <item>5</item> <item>6</item> </string-array> </resources>
CustomListPreference
public class CustomListPreference extends ListPreference { private Context ctx; public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); ctx = context; } public CustomListPreference(Context context) { super(context); ctx = context; } @Override protected void onBindView(View view) { super.onBindView(view); setCustomStyle(view); } private void setCustomStyle(View view) { RippleDrawable drawable = (RippleDrawable) ctx.getDrawable(R.drawable.my_ripple_background); view.setBackground(drawable); } }
My_ripple_background.xml
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/holo_blue_light"> <item android:id="@android:id/mask"> <color android:color="@android:color/white" /> </item> </ripple>
Cuando se presiona, muestra un efecto de ondulación azul claro, como se especifica en el xml:
He construido este ejemplo basado en su código, y el código del ejemplo SettingsActivity en las muestras de SDK android.
Editar:
Después de algún tiempo en el chat y probar varias cosas, hemos llegado a la conclusión de que el problema es causado por el teléfono de OP (Samsung S5) o su configuración. Cuando OP probó el código en el emulador, todo funcionó correctamente.
Para la referencia – esto es cómo miró en el teléfono de OPs:
- Cómo pasar una gran colección entre actividades (flujo de detalle maestro)
- Tono DTMF en RecognitionListener.onReadyForSpeech () confundido con el discurso