studio programacion pantalla móviles imagen fondo desarrollo curso como celular cambiar automaticamente aplicaciones java android background drawable out-of-memory

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

  1. Asigne un nombre a su diseño principal.
  2. Vaya a su MainActivity y encuentre su RelativeLayout llamando al findViewById (R.id. "Given_name").
  3. 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));