java - programacion - Cómo configurar el dibujo de fondo programáticamente en Android
manual de programacion android pdf (11)
Dentro de la aplicación / res / your_xml_layout_file .xml
- Asigne un nombre a su diseño principal.
- Vaya a su MainActivity y encuentre su RelativeLayout llamando al findViewById (R.id. "Given_name").
- Utilice el diseño como un Objeto clásico, llamando al método setBackgroundColor ().
Para establecer el fondo:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
¿Es la mejor manera de hacerlo?
Estoy usando minSdkVersion 16 y targetSdkVersion 23 Lo siguiente funciona para mí, usa ContextCompat.getDrawable (context, R.drawable.drawable);
En lugar de usar:
layout.setBackgroundResource(R.drawable.ready);
Más bien usar:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
se usa en un fragmento, si llamar desde una actividad usa this
Prueba este código:
Drawable thumb = ContextCompat.getDrawable(getActivity(), R.mipmap.cir_32);
mSeekBar.setThumb(thumb);
Prueba esto:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
y para API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
Pruebe ViewCompat.setBackground(yourView , drawableBackground)
Si sus fondos están en la carpeta dibujable en este momento, intente mover las imágenes de la carpeta drawable a drawable-nodpi en su proyecto. Esto funcionó para mí, parece que de lo contrario las imágenes son reescaladas por ellos mismos.
También puede establecer el fondo de cualquier imagen:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
Use butterknife para enlazar el recurso butterknife a una variable agregando esto a la parte superior de su clase (antes de cualquier método).
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
Entonces dentro de uno de tus métodos agrega
layout.setBackground(background);
Eso es todo lo que necesitas
layout.setBackgroundResource(R.drawable.ready);
es correcto.
Otra forma de lograrlo es usar lo siguiente:
final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}
Pero creo que el problema ocurre porque estás intentando cargar imágenes grandes.
Here hay un buen tutorial sobre cómo cargar grandes mapas de bits.
ACTUALIZAR:
getDrawable (int) en desuso en el nivel de API 22
getDrawable(int )
ahora está en desuso en el nivel 22 de API. En su lugar, debe usar el siguiente código de la biblioteca de soporte:
ContextCompat.getDrawable(context, R.drawable.ready)
Si hace referencia al código fuente de ContextCompat.getDrawable , le ofrece algo como esto:
/**
* Return a drawable object associated with a particular resource ID.
* <p>
* Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned
* drawable will be styled for the specified Context''s theme.
*
* @param id The desired resource identifier, as generated by the aapt tool.
* This integer encodes the package, type, and resource entry.
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
public static final Drawable getDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompatApi21.getDrawable(context, id);
} else {
return context.getResources().getDrawable(id);
}
}
Más detalles en ContextCompat
A partir de la API 22, debe usar el getDrawable(int, Theme)
lugar de getDrawable (int).
ACTUALIZAR:
Si está utilizando la biblioteca de soporte v4, lo siguiente será suficiente para todas las versiones.
ContextCompat.getDrawable(context, R.drawable.ready)
Deberá agregar lo siguiente en su aplicación build.gradle
compile ''com.android.support:support-v4:23.0.0'' # or any version above
O usando ResourceCompat, en cualquier API como a continuación:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
RelativeLayout relativeLayout; //declare this globally
ahora, dentro de cualquier función como onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));