it-swarm.com.de

Wie man programmgesteuert den Hintergrund in Android zeichnet

So legen Sie den Hintergrund fest:

RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);

Ist der beste Weg, es zu tun?

252
Chad Bingham

layout.setBackgroundResource(R.drawable.ready); ist korrekt.
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) auf API-Ebene 22 veraltet


getDrawable(int ) ist jetzt auf API-Ebene 22 veraltet. Verwenden Sie stattdessen den folgenden Code aus der Unterstützungsbibliothek:

ContextCompat.getDrawable(context, R.drawable.ready)

Wenn Sie auf den Quellcode von ContextCompat.getDrawable verweisen, erhalten Sie ungefähr 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 Methode getDrawable(int, Theme) anstelle von getDrawable (int) verwenden.

UPDATE:
Wenn Sie die Support-v4-Bibliothek verwenden, ist das Folgende für alle Versionen ausreichend.

ContextCompat.getDrawable(context, R.drawable.ready)

In Ihrer App build.gradle müssen Sie Folgendes hinzufü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);
448
Lazy Ninja

Versuche dies:

layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));

und für API 16 <:

layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
102
Ahmad
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
14
Sujay Kumar

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

Wenn sich Ihre Hintergründe jetzt im Zeichenordner befinden, verschieben Sie die Bilder in Ihrem Projekt vom Zeichenordner in den Zeichenordner "nodpi". Das hat bei mir geklappt, anscheinend werden die Bilder sonst von ihnen selbst neu skaliert ..

3
Jordy

Ich benutze eine minSdkVersion 16 und eine targetSdkVersion 23.
Folgendes funktioniert bei mir, es nutzt

ContextCompat.getDrawable(context, R.drawable.drawable);

Anstelle von:

layout.setBackgroundResource(R.drawable.ready);

Verwenden Sie lieber:

layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));

getActivity() wird in einem Fragment verwendet, wenn Sie von einer Aktivität aus aufrufen, verwenden Sie this.

2
Vostro

Versuchen Sie es mit ViewCompat.setBackground(yourView, drawableBackground)

1
Umair Khalid
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));
1

Verwenden Sie Buttermesser , um die zu zeichnende Ressource an eine Variable zu binden, indem Sie diese (vor allen Methoden) an die Spitze Ihrer Klasse setzen.

@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;

dann in einer Ihrer Methoden hinzufügen

layout.setBackground(background);

Das ist alles was du brauchst

1
Stephen

In der App/res/your_xml_layout_file. Xml

  1. Weisen Sie Ihrem übergeordneten Layout einen Namen zu.
  2. Gehen Sie zu Ihrer MainActivity und suchen Sie Ihr RelativeLayout, indem Sie findViewById (R.id. "Given_name") aufrufen.
  3. Verwenden Sie das Layout als klassisches Objekt, indem Sie die Methode setBackgroundColor () aufrufen.
0
Vaggos Phl

versuche dies.

 int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
 preview = (ImageView) findViewById(R.id.preview);
 preview.setBackgroundResource(res);
0
Franklin CI

Versuchen Sie diesen Code:

Drawable thumb = ContextCompat.getDrawable(getActivity(), R.mipmap.cir_32);
mSeekBar.setThumb(thumb);
0
Ashwin H