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);