titulo studio personalizado linea icono edittext color cambiar barra android android-layout xamarin.android shape

personalizado - cambiar icono navigation drawer android studio



¿Cómo cambiar el color de la forma de forma dinámica? (11)

En mi caso, se bloqueó porque getBackground devolvió un GradientDrawable lugar de un ShapeDrawable .

Así que lo modifiqué así:

((GradientDrawable)someView.getBackground()).setColor(someColor);

yo tengo

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFFF00" /> <padding android:left="7dp" android:top="7dp" android:right="7dp" android:bottom="7dp" /> </shape> <TextView android:background="@drawable/test" android:layout_height="45dp" android:layout_width="100dp" android:text="Moderate" />

Así que ahora quiero que esta forma cambie de colores en función de la información que obtengo de una llamada al servicio web. Por lo tanto, podría ser de color amarillo, verde o rojo o lo que sea, dependiendo del color que reciba de la llamada de servicio web.

¿Cómo puedo cambiar el color de la forma? Basado en esta información?


Esta solución funcionó para mí usando el android sdk v19:

//get the image button by id ImageButton myImg = (ImageButton) findViewById(R.id.some_id); //get drawable from image button GradientDrawable drawable = (GradientDrawable) myImg.getDrawable(); //set color as integer //can use Color.parseColor(color) if color is a string drawable.setColor(color)


Esto funciona para mí, con un recurso xml inicial:

example.setBackgroundResource(R.drawable.myshape); GradientDrawable gd = (GradientDrawable) example.getBackground().getCurrent(); gd.setColor(Color.parseColor("#000000")); gd.setCornerRadii(new float[]{30, 30, 30, 30, 0, 0, 30, 30}); gd.setStroke(2, Color.parseColor("#00FFFF"), 5, 6);

Resultado de lo anterior: http://i.stack.imgur.com/hKUR7.png


Intento la respuesta de Ronnie y mi aplicación se cuelga. Luego reviso mi xml dibujable. Se parece a esto:

<selector >...</selector>

. Lo cambié a esto: (también cambié los atributos)

<shape> ... </shape>

Funciona.

Para aquellos que enfrentan el mismo problema.


Mi forma xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/transparent" /> <stroke android:width="0.5dp" android:color="@android:color/holo_green_dark"/> </shape>

Mi actividad xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="cn.easydone.test.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> <TextView android:id="@+id/test_text" android:background="@drawable/bg_stroke_dynamic_color" android:padding="20dp" android:text="asdasdasdasd" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" />

Mi actividad java:

TextView testText = (TextView) findViewById(R.id.test_text); ((GradientDrawable)testText.getBackground()).setStroke(10,Color.BLACK);

Cuadro de result : result


Podrías modificarlo simplemente así

GradientDrawable bgShape = (GradientDrawable)btn.getBackground(); bgShape.setColor(Color.BLACK);


Puedes construir tus propias formas en Java. Hice esto para un iPhone como Page Controler y pinto las formas en Java:

/** * Builds the active and inactive shapes / drawables for the page control */ private void makeShapes() { activeDrawable = new ShapeDrawable(); inactiveDrawable = new ShapeDrawable(); activeDrawable.setBounds(0, 0, (int) mIndicatorSize, (int) mIndicatorSize); inactiveDrawable.setBounds(0, 0, (int) mIndicatorSize, (int) mIndicatorSize); int i[] = new int[2]; i[0] = android.R.attr.textColorSecondary; i[1] = android.R.attr.textColorSecondaryInverse; TypedArray a = this.getTheme().obtainStyledAttributes(i); Shape s1 = new OvalShape(); s1.resize(mIndicatorSize, mIndicatorSize); Shape s2 = new OvalShape(); s2.resize(mIndicatorSize, mIndicatorSize); ((ShapeDrawable) activeDrawable).getPaint().setColor( a.getColor(0, Color.DKGRAY)); ((ShapeDrawable) inactiveDrawable).getPaint().setColor( a.getColor(1, Color.LTGRAY)); ((ShapeDrawable) activeDrawable).setShape(s1); ((ShapeDrawable) inactiveDrawable).setShape(s2); }

espero que esto ayude. Greez Fabian


Si tienes una imageView como esta:

<ImageView android:id="@+id/color_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:src="@drawable/circle_color"/>

que le dan una forma dibujable como src, puede usar este código para cambiar el color de la forma:

ImageView iv = (ImageView)findViewById(R.id.color_button); GradientDrawable bgShape = (GradientDrawable)iv.getDrawable(); bgShape.setColor(Color.BLACK);


Tal vez alguien más necesite cambiar el color en el XML sin crear múltiples derivables como yo necesitaba. Luego haz un círculo que se pueda dibujar sin color y luego especifica backgroundTint para ImageView.

circle.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> </shape>

Y en tu diseño :

<ImageView android:layout_width="50dp" android:layout_height="50dp" android:background="@drawable/circle" android:backgroundTint="@color/red"/>

Editar:

Hay un bug respecto a este método que impide que funcione en Android Lollipop 5.0 (API nivel 21). Pero se han corregido en versiones más nuevas.


circle.xml (dibujable)

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#000"/> <size android:width="10dp" android:height="10dp"/> </shape>

diseño

<ImageView android:id="@+id/circleColor" android:layout_width="15dp" android:layout_height="15dp" android:textSize="12dp" android:layout_gravity="center" android:layout_marginLeft="10dp" android:background="@drawable/circle"/>

en actividad

circleColor = (ImageView) view.findViewById(R.id.circleColor); int color = Color.parseColor("#00FFFF"); ((GradientDrawable)circleColor.getBackground()).setColor(color);


LayerDrawable bgDrawable = (LayerDrawable) button.getBackground(); final GradientDrawable shape = (GradientDrawable) bgDrawable.findDrawableByLayerId(R.id.round_button_shape); shape.setColor(Color.BLACK);