So stellen Sie den Hintergrund ein:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Ist der beste Weg, es zu tun?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Ist der beste Weg, es zu tun?
Antworten:
layout.setBackgroundResource(R.drawable.ready);
ist richtig.
Eine andere Möglichkeit, dies zu erreichen, besteht darin, Folgendes zu verwenden:
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));
}
Aber ich denke, das Problem tritt auf, weil Sie versuchen, große Bilder zu laden.
Hier ist ein gutes Tutorial zum Laden großer Bitmaps.
UPDATE:
getDrawable (int), das in API-Ebene 22
getDrawable(int )
veraltet ist, ist jetzt in API-Ebene 22 veraltet. Sie sollten stattdessen den folgenden Code aus der Support-Bibliothek verwenden:
ContextCompat.getDrawable(context, R.drawable.ready)
Wenn Sie auf den Quellcode von ContextCompat.getDrawable verweisen , erhalten Sie Folgendes :
/**
* 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);
}
}
Weitere Details zu ContextCompat
Ab API 22 sollten Sie die getDrawable(int, Theme)
Methode anstelle von getDrawable (int) verwenden.
UPDATE:
Wenn Sie die Support v4-Bibliothek verwenden, reicht Folgendes für alle Versionen aus.
ContextCompat.getDrawable(context, R.drawable.ready)
Sie müssen Folgendes in Ihre App build.gradle einfügen
compile 'com.android.support:support-v4:23.0.0' # or any version above
Oder verwenden Sie ResourceCompat in einer der folgenden APIs:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
if(buttonBackground.equals(R.drawable.myDrawable))
wo Drawable buttonBackground = myButton.getBackground();
ich diesen Fehler bekomme
myActivity.getTheme()
für die neueste Version der Methode anstelle von null Parameter benötigen :myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
AppCompatResources.getDrawable(this.getContext(), resId)
stattdessen verwenden, Google hat es bereits in AppCompat*
Widget / Ansicht implementiert , zB:android.support.v7.widget.AppCompatCheckBox
Versuche dies:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
und für API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
getResources().getDrawable()
. Der richtige Code entspricht layout.setBackgroundResource(R.drawable.ready);
genau dem verwendeten OP. Das Problem liegt hier in der Größe der Bitmap.
RelativeLayout relativeLayout; //declare this globally
Jetzt in jeder Funktion wie onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
Sie können auch den Hintergrund für jedes Bild festlegen:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
(.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
inneren Code implementieren
Ich verwende eine minSdkVersion 16 und eine targetSdkVersion 23.
Das Folgende funktioniert für mich, es wird verwendet
ContextCompat.getDrawable(context, R.drawable.drawable);
Anstatt zu verwenden:
layout.setBackgroundResource(R.drawable.ready);
Verwenden Sie lieber:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
wird in einem Fragment verwendet, wenn der Aufruf von einer Aktivität verwendet wird this
.
Wenn sich Ihre Hintergründe gerade im Zeichenordner befinden, versuchen Sie, die Bilder in Ihrem Projekt vom Zeichen- in den Zeichen-Nodpi-Ordner zu verschieben. Das hat bei mir funktioniert, anscheinend werden die Bilder sonst von ihnen selbst neu skaliert.
Verwenden Sie Buttermesser , um die zeichnbare Ressource an eine Variable zu binden, indem Sie diese am Anfang Ihrer Klasse hinzufügen (vor allen Methoden).
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
dann innerhalb einer Ihrer Methoden hinzufügen
layout.setBackground(background);
Das ist alles was du brauchst
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));
Probieren Sie es aus ViewCompat.setBackground(yourView, drawableBackground)
Versuche dies.
int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
preview = (ImageView) findViewById(R.id.preview);
preview.setBackgroundResource(res);
setBackground(getContext().getResources().getDrawable(R.drawable.green_rounded_frame));
In der App / res / your_xml_layout_file .xml
remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);