Necesito cambiar el color del trazo a un color definido por el usuario. Nada que ver con el estado
Necesito cambiar el color del trazo de la aplicación. El usuario es capaz de cambiar el color de fondo así que también necesito que cambien el trazo (contorno) del botón. Como ya está establecido en el dibujable (muestra a continuación) no he encontrado una manera de cambiar esto. Parece que todas las otras preguntas como esta acaba de decir para usar el archivo XML …. pero eso no me deja hacerlo dinámico. ¡Gracias por cualquier ayuda!
Necesito cambiar el color del trazo a un color definido por el usuario. Nada que ver con el estado.
- ¿Cuál es la diferencia entre ACTION_CANCEL y ACTION_UP en MotionEvent?
- ¿Detectar la prensa del tacto contra la prensa larga contra el movimiento?
- Sensor de movimiento vertical
- ¿Cómo puedo obtener la dirección del movimiento usando un acelerómetro?
- Mover marcador en google maps api 2
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="@color/Dim_Gray" /> <<<<--- This is what I need to change <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <corners android:bottomRightRadius="12dp" android:bottomLeftRadius="12dp" android:topLeftRadius="12dp" android:topRightRadius="12dp"/> </shape>
- Detectar el patrón de movimiento en un dispositivo Android
- Crear burbujas con gestos / Movimientos como la aplicación de música de Apple en Android
- cómo detectar este gesto de movimiento específico a través de sensores?
- Android - Canvas onDraw con cámara ampliada siguiendo movimientos de carácter
- Android: ¿Cómo mover un BitmapDrawable?
1. Si tiene un archivo dibujable para una "vista" como esta
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp" /> <solid android:color="@android:color/white" /> <stroke android:width="3px" android:color="@color/blue" /> </shape>
Entonces usted puede cambiar
a. Color del trazo :
GradientDrawable drawable = (GradientDrawable)view.getBackground(); drawable.setStroke(3, Color.RED); // set stroke width and stroke color
segundo. Color sólido :
GradientDrawable drawable = (GradientDrawable)view.getBackground(); drawable.setColor(Color.RED); // set solid color
2. Si tiene un archivo dibujable para una "vista" como esta
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:id="@+id/buttonSelected"> <shape> <solid android:color="@color/blue" /> <stroke android:width="1px" android:color="@color/blue" /> </shape> </item> <item android:state_checked="false" android:id="@+id/buttonNotSelected"> <shape android:shape="rectangle"> <solid android:color="@color/white" /> <stroke android:width="1px" android:color="@color/blue" /> </shape> </item> </selector>
A continuación, puede cambiar los atributos de elementos individuales tomando objetos separables separables por allí posiciones.
StateListDrawable drawable = (StateListDrawable)view.getBackground(); DrawableContainerState dcs = (DrawableContainerState)drawable.getConstantState(); Drawable[] drawableItems = dcs.getChildren(); GradientDrawable gradientDrawableChecked = (GradientDrawable)drawableItems[0]; // item 1 GradientDrawable gradientDrawableUnChecked = (GradientDrawable)drawableItems[1]; // item 2
Ahora para cambiar el movimiento o el color sólido:
//solid color gradientDrawableChecked.setColor(Color.BLUE); gradientDrawableUnChecked.setColor(Color.RED); //stroke gradientDrawableChecked.setStroke(1, Color.RED); gradientDrawableUnChecked.setStroke(1, Color.BLUE);
Tal vez se están refiriendo a listas de estado de color que le permite cambiar el color basado en si el botón fue presionado / enfocado / habilitado / etc
Intente usar StateLists (en contraposición a ColorStateList). Echa un vistazo: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
También puede crear un ShapeDrawable
(o un RoundRectShape
en su ejemplo) de forma programática y, a continuación, llamar a setBackgroundDrawable
del botón
Respondí una pregunta similar en Cambiar color de borde de forma en tiempo de ejecución
Su como la misma solución propuesta por f20k pero en mi caso el drawable era un GradientDrawable en vez de un ShapeDrawable.
Ver si funciona