ImageButton im FrameLayout positionieren. Appcrash

  • 6 Antworten
  • Letztes Antwortdatum
G

Geforcer

Neues Mitglied
0
Hallo

Ich bin neu hier bei euch und ebenfalls neu in der Android entwicklung.

versuche momentan die positionen von meinen ImageButton per code zu platzieren. aber die App stürzt immer wieder ab. Vielleicht seht ihr ja was ich falsch mache.


Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        FrameLayout buttonframe = (FrameLayout)findViewById(R.id.buttonframe);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        //Startpositionen der Buttons setzen und spacer positions setzen
        int Frame_Heigth = buttonframe.getHeight();
        int Frame_Width = buttonframe.getWidth();
        ImageButton button1 = new ImageButton(this);
        ImageButton button2 = new ImageButton(this);
        ImageButton button3 = new ImageButton(this);
        ImageButton button4 = new ImageButton(this);
        ImageButton button5 = new ImageButton(this);
        button1.setImageResource(R.drawable.bigweis);
        button2.setImageResource(R.drawable.buttonblaugruen);
        button3.setImageResource(R.drawable.buttonscwarz);
        button4.setImageResource(R.drawable.drehkugel);
        button5.setImageResource(R.drawable.wassersy);
        
        //button size
        int buttonCenterSize = (Frame_Heigth / 100) * 43;
        int buttonnormalsize = (Frame_Heigth/100)*5;
        
        
        //set Button 1
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(50, buttonCenterSize);
        int middleOfFrame = Frame_Heigth / 2;
        lp.setMargins(0, middleOfFrame, 0, 0);
        buttonframe.addView(button1, lp); 
       
        
        //setButton 2 = Pos +1
        FrameLayout.LayoutParams lp2 = new FrameLayout.LayoutParams(50, buttonnormalsize);
        int posbtn2 = (Frame_Heigth / 100)*24;
        lp2.setMargins(0, posbtn2, 0, 0);
        buttonframe.addView(button2, lp2);
        
       
        
        //setButtton 3 = pos +2
        FrameLayout.LayoutParams lp3 = new FrameLayout.LayoutParams(50, buttonnormalsize);
        int posbtn3 = (Frame_Heigth / 100) * 17;
        lp3.setMargins(0, posbtn3, 0, 0);
        buttonframe.addView(button3, lp3);
        
        //setButton = Pos -1
        FrameLayout.LayoutParams lp4 = new FrameLayout.LayoutParams(50, buttonnormalsize);
        int posbtn4 = (Frame_Heigth / 100) * 77;
        lp4.setMargins(0, posbtn4, 0, 0);
        buttonframe.addView(button4, lp4);  
        
        //setButton = Pos -2
        FrameLayout.LayoutParams lp5 = new FrameLayout.LayoutParams(50, buttonnormalsize);
        int posbtn5 = (Frame_Heigth / 100) * 84;
        lp5.setMargins(0, posbtn5, 0, 0);
         buttonframe.addView(button5, lp5);
        
        //initalisiere Position +3,+4,-3,-4
        int posSpcMinus2 = (Frame_Heigth / 100) * 3;
        int posSpcMinus1 = (Frame_Heigth / 100) * 10;
        int posSpcPlus1 = (Frame_Heigth / 100) * 91;
        int posSpcPlus2 = (Frame_Heigth / 100) * 98;
        

        // setContentView(R.layout.activity_main);
Code:
05-04 19:36:22.590: D/AndroidRuntime(12504): Shutting down VM
05-04 19:36:22.590: W/dalvikvm(12504): threadid=1: thread exiting with uncaught exception (group=0x40a6c1f8)
05-04 19:36:22.590: E/AndroidRuntime(12504): FATAL EXCEPTION: main
05-04 19:36:22.590: E/AndroidRuntime(12504): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.buttonbar/com.example.buttonbar.MainActivity}: java.lang.NullPointerException
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.os.Looper.loop(Looper.java:137)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread.main(ActivityThread.java:4447)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at java.lang.reflect.Method.invokeNative(Native Method)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at java.lang.reflect.Method.invoke(Method.java:511)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at dalvik.system.NativeStart.main(Native Method)
05-04 19:36:22.590: E/AndroidRuntime(12504): Caused by: java.lang.NullPointerException
05-04 19:36:22.590: E/AndroidRuntime(12504):     at com.example.buttonbar.MainActivity.onCreate(MainActivity.java:20)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.Activity.performCreate(Activity.java:4466)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1092)
05-04 19:36:22.590: E/AndroidRuntime(12504):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
05-04 19:36:22.590: E/AndroidRuntime(12504):     ... 11 more
 
Bei einer
Caused by: java.lang.NullPointerException
Null Pointer Exception ist es immer gut, die App mal im Debug Modus durchlaufen zu lassen.
Dieser Fehler tritt auf, wenn irgendein Objekt, was verwendet ist, null ist. Wenn du während dem Debuggen auf die Variablen achtest, solltest du den Fehler finden. Versuch es einfach mal!
 
Danke Für die schnelle Antwort.

Leider werde ich mit dem Debugger nicht richtig warm.

Das ist der letzte Eintrag im Variablen Fenster bevor die App abstürzt.

Code:
this    ZygoteInit$MethodAndArgsCaller  (id=830020210848)    
    cause    ZygoteInit$MethodAndArgsCaller  (id=830020210848)    
    detailMessage    null    
    mArgs    String[0]  (id=830020210240)    
    mMethod    Method  (id=830020210608)    
    stackState     (id=830020210912)    
    stackTrace    null    
    suppressedExceptions    ArrayList  (id=830020210888)    
ex    InvocationTargetException  (id=830020346856)    
    cause    RuntimeException  (id=830020306552)    
    detailMessage    null    
    stackState     (id=830020346920)    
    stackTrace    null    
    suppressedExceptions    ArrayList  (id=830020346896)    
    target    RuntimeException  (id=830020306552)

Kann mir jemand eine Seite empfehlen die ausführlich den Debugger erklärt?

lg Geforcer
 
Hi,

Code:
FrameLayout buttonframe =(FrameLayout)findViewById(R.id.buttonframe);   
super.onCreate(savedInstanceState);    
setContentView(R.layout.activity_main);
Erst setContentView setzen dann dein FrameLayout initialisieren weil diesen holst du ja von der xml. Deswegen kommt bei dir nullpointerexception.
 
Ah super Kollen. nun stürzt die app nicht mehr ab. Aber meine Bilder bekomme ich auch nicht angezeigt. ein leerer Screen ist zu sehen :(
 
Hey,

überprüfe mal deine frame_width und frame_height mit deinem debugger. Ich glaube beide haben den Wert 0. Oder ändere die 2 Variablen auf 2 konstante
Werte um zu schauen ob sich dann was tut.
 
tatsächlich. da lag das Problem. vielen Dank.:rolleyes2:

Aber wieso kann ich nicht über diese Methode Die Layoutgröße nicht auslesen?
gibt es eine andere möglichkeit dies zu machen?


Edit: Realisiere das jetzt über die Display metrics. klappt so ganz gut :) vielen dank für die hilfe..
 
Zuletzt bearbeitet:
Zurück
Oben Unten