ImageButton in einem LinearLayout erstellen

  • Antworten:4
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 45

08.09.2016 19:54:49 via Website

So soll es am Ende aussehen:

<LinearLayout
                android:layout_height="70dp"
                android:layout_width="wrap_content"
                android:background="@drawable/box"
                android:id="@+id/rb5"
                android:showDividers="beginning"
                android:gravity="center"
                android:layout_alignWithParentIfMissing="false"
                android:orientation="horizontal"
                android:layout_alignParentStart="true"
                android:layout_weight="1"
                android:layout_marginTop="5dp">

                <ImageButton
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:id="@+id/imgBtnItem5"
                    android:src="@drawable/ruestung"
                    android:background="#00ffffff" />
            </LinearLayout>

Einen ImageButton erstelle ich im Quelltext so:

ImageButton imgBtnItem5 = new ImageButton(this);

Allerdings möchte ich nun den imgBtn5 in dem LinearLayout (rb5) erstellen. Ich denke mal, ich muss das "this" anpassen, weiß aber nicht so recht, wie... :-(

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

08.09.2016 20:00:43 via App

Ne musst du nicht..

Du hast das Pronzip von Views wohl noch nicht verstanden oder?

Das LinearLayout ist dein Container und der ImageButton das Containee/Child wenn ich das mal so sagen darf.
Wenn man das jetzt per Programm erstellen will, dann erstellt man den ImageButton so wie du es gerade tutst, holt oder erstellt sich dann eine Instanz des LinearLayouts und macht dann LinearLayout#addChild(imgBtn);
Das gilt für jede Viewund nicht nur für den Button.

Es gibt also das Layout als Container und die Views die da drinnen sein sollen muss man mit addChild hinzufügen

Alternatv bei komplexeren Layouts eine XML erstellen und mit einem LayoutInflater in eine View umwandeln.

— geändert am 08.09.2016 20:03:02

LG Pascal //It's not a bug, it's a feature. :) ;)

  • Forum-Beiträge: 45

08.09.2016 20:06:07 via Website

Ich habe es nun hinbekommen:

ImageButton imgBtnItem5 = new ImageButton(this);
    imgBtnItem5.setImageResource(R.drawable.rezepte);
    final LinearLayout rb5 = (LinearLayout) findViewById((R.id.rb5));
    rb5.addView(imgBtnItem5);

Das funktioniert alles super ;-)

Allerdings wenn ich nun meinen imgBtn5 zum draglistener hinzufügen möchte, stürzt die App ab:

findViewById(R.id.imgBtnItem5).setOnTouchListener(dragListener);

Fehlermeldung:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

08.09.2016 20:12:04 via App

Liegt daran dass du dem Button keine ID gegeben hast. Wenn du Views per Code erstellst und auf diese verweisen willst musst du erst mit imgBtn.setId(...) oder so die ID setzen.

Aber du hast doch die Button instanz da, dann kannst du doch einfach imgbtn5.setOnTouchListener etc... machen.
Das lesen von Views per ID vom Layout ist auch nicht immer das beste wenn man die View an sich schon als Variable hat

— geändert am 08.09.2016 20:12:15

LG Pascal //It's not a bug, it's a feature. :) ;)

  • Forum-Beiträge: 45

08.09.2016 20:15:18 via Website

Manchmal sieht man den Wald vor lauter Bäumen nicht mehr...

imgBtnItem5.setOnTouchListener(dragListener);

... hat völlig gereicht, danke ;-)