studio setbackgroundcolor linearlayout color android view background drawable

setbackgroundcolor - setBackground vs setBackgroundDrawable(Android)



textview set background drawable (12)

Quiero establecer el fondo dibujable de una vista. Hay dos métodos para esto (por lo que veo): setBackground y setBackgroundDrawable .

Cuando uso setBackground , dice que se agregó en el nivel 16 del API, pero la versión mínima del SDK de mi proyecto es 7. Supongo que no va a funcionar en nada por debajo de 16, ¿verdad? Pero cuando uso setBackgroundDrawable, dice que está en desuso.

¿Qué se supone que debo usar?


Ahora puedes usar cualquiera de esas opciones. Y va a funcionar en cualquier caso. Tu color puede ser un código HEX , como este:

myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));

Un recurso de color , como este:

myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));

O un recurso xml personalizado , así:

myView.setBackgroundResource(R.drawable.my_custom_background);

¡Espero eso ayude!


Está en desuso, pero aún funciona, así que puedes usarlo. Pero si quieres estar completamente correcto, solo por lo completo ... Harías algo como lo siguiente:

int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { setBackgroundDrawable(); } else { setBackground(); }

Para que esto funcione, debe configurar buildTarget api 16 y min build en 7 o algo similar.


Esto funciona para mí: la vista de vista es su editText, spinner ... etc. E int drawable es su ejemplo de ruta drawable (R.drawable.yourDrawable)

public void verifyDrawable (View view, int drawable){ int sdk = Build.VERSION.SDK_INT; if(sdk < Build.VERSION_CODES.JELLY_BEAN) { view.setBackgroundDrawable( ContextCompat.getDrawable(getContext(),drawable)); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setBackground(getResources().getDrawable(drawable)); } }


Parece que actualmente no hay diferencia entre las 2 funciones, como se muestra en el código fuente (crédito a esta publicación ):

public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); } @Deprecated public void setBackgroundDrawable(Drawable background) { ... }

por lo que es solo una decisión de nomenclatura, similar a la de padre de relleno frente a padre pareado.


Puede usar setBackgroundResource() lugar del nivel 1 de API.


Sé que esta es una pregunta antigua, pero tengo una situación similar, y mi solución fue

button.setBackgroundResource( R.drawable.ic_button ); Drawable d = button.getBackground();

y luego puedes jugar con el "Drawable", aplicando filtros de color, etc.


También puedes hacer esto:

try { myView.getClass().getMethod(android.os.Build.VERSION.SDK_INT >= 16 ? "setBackground" : "setBackgroundDrawable", Drawable.class).invoke(myView, myBackgroundDrawable); } catch (Exception ex) { // do nothing }

EDITAR: Tal como lo señaló @BlazejCzapp , es preferible evitar el uso de la reflexión si puede resolver el problema sin ella. Tuve un caso de uso en el que no pude resolverlo sin reflexión, pero ese no es el caso anterior. Para obtener más información, visite http://docs.oracle.com/javase/tutorial/reflect/index.html


También tuve este problema, pero hice una solución utilizando un ImageView .

Intente usar un RelativeLayout y agregue un ImageView dentro de él (ancho y alto: fill_parent, scaleType: center).

También asegúrese de que la vista de imagen sea el primer elemento dentro de RelativeLayout, para que actúe como fondo.


Usando Android Studio 1.5.1 obtuve las siguientes advertencias:

Call requires API level 16 (current min is 9): android.view.View#setBackground

y las quejas sobre la depreciación.

''setBackgroundDrawable(android.graphics.drawable.Drawable)'' is deprecated

Usando este formato, me deshice de ambos:

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { //noinspection deprecation layout.setBackgroundDrawable(drawable); } else { layout.setBackground(drawable); }


Utilice ViewCompat.setBackground(view, background);


Utilice setBackgroundResource (R.drawable.xml / png)


podría usar setBackgroundResource() lugar de relativeLayout.setBackgroundResource(R.drawable.back);

esto funciona para mi