2016-08-20 2 views
0

ich ein ImageButton habe, die verschoben werden, nachdem es angeklickt wurde (OnClickListener implementiert) und ein LinearLayout, die sichtbar gesetzt wird, wenn die ImageButton geklickt (auch in seiner OnClick-Methode).Image ist nicht sichtbar nach anderem Layout sichtbar auf reales Gerät eingestellt ist

Seltsames Verhalten: Auf meinem virtuelles Gerät funktioniert es gut, aber auf dem realen Gerät der ImageButton nicht wieder sichtbar, nachdem die LinearLayout zu sichtbar gesetzt. Ich habe auch das Layout verzögert (mit einer Sekunde), sichtbar und die ImageButton wurde richtig bewegt, aber wie gesagt es wieder nicht sichtbar ist (auch wenn ich es ausdrücklich auf VISIBLE gesetzt), wenn die LinearLayout wurde auf sichtbar)

Irgendwelche Ideen, wie Sie dieses Problem beheben können?

Die onClickListener Implementierung (ich weiß, hartcodierte Werte sind nicht mehr reagiert, aber die App funktioniert nur für ein bestimmtes Gerät):

private void setUpMenuBar() { 
    final LinearLayout menuLayout = (LinearLayout) findViewById(R.id.menu_layout); 

    menuLayout.setVisibility(View.INVISIBLE); 
    final int menuLayoutWidth = menuLayout.getWidth(); 
    final ImageButton openMenuBtn = (ImageButton) findViewById(R.id.btn_open_menu); 
    openMenuBtn.setOnClickListener(new View.OnClickListener() { 
     boolean menuVisible = false; 
     @Override 
     public void onClick(View v) { 
      Log.d("onClick", "menu visible: " + menuVisible + ", Rigth: " + openMenuBtn.getRight() + ", layoutWidth: " + menuLayoutWidth); 
      if(menuVisible) { 
       openMenuBtn.setRight(1920); 
       openMenuBtn.setLeft(1720); 
       menuLayout.setVisibility(View.INVISIBLE); 
       menuVisible = false; 
      } 
      else { 
       openMenuBtn.setRight(1520); 
       openMenuBtn.setLeft(1320); 
       menuLayout.setVisibility(View.VISIBLE); 
       menuVisible = true; 

      } 
      Log.d("onClick", "menu visible: " + menuVisible + ", Rigth: " + openMenuBtn.getRight() + ", left: " + openMenuBtn.getLeft()); 
     } 
    }); 
} 

Und das XML-Layout:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right" 
    android:src="@mipmap/arrow" 
    android:background="@null" 
    android:id="@+id/btn_open_menu" 
    /> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:id="@+id/menu_layout" 
    android:orientation="vertical" 
    android:background="#000000" 
    android:layout_gravity="right"> 
    <ImageButton 
     android:layout_width="200dp" 
     android:layout_height="20dp" 
     android:layout_gravity="right" 
     android:layout_weight="33" 
     android:layout_marginBottom="2dp" 
     android:src="@mipmap/zahnrad" 
     android:background="@drawable/btn_menu_settings"/> 
    <ImageButton 
     android:layout_width="200dp" 
     android:layout_height="20dp" 
     android:layout_gravity="right" 
     android:layout_weight="33" 
     android:layout_marginBottom="2dp" 
     android:src="@mipmap/schraubendreher" 
     android:background="@drawable/btn_menu_settings"/> 
    <ImageButton 
     android:layout_width="200dp" 
     android:layout_height="20dp" 
     android:layout_gravity="right" 
     android:layout_weight="34" 
     android:src="@mipmap/fragezeichen" 
     android:background="@drawable/btn_menu_settings_roundet"/> 
</LinearLayout> 

Antwort

1

wie Sie sagten, es funktioniert auf virtuellen Gerät, aber nicht auf Real.

Sie haben die Werte setLeft() und setRight() auf sehr große Werte von 1920 bzw. 1720 gesetzt. Dies kann dazu führen, dass das ImageButton vom Bildschirm Ihres realen Geräts abhängig von den Pixeln des Displays, das Ihr Gerät packt, aus dem Bildschirm gezogen wird.

Versuchen Sie mit kleineren Werten von Parametern zu diesen Methoden und sehen Sie, es zeichnet die Ansichten auf dem Display.

0

Get Anzeige Höhe und Breite mit

DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int width = displaymetrics.widthPixels; 
    int height = displaymetrics.heightPixels; 

dann berechnen SetRight-Wert und SetLeft Wert von Breite und Höhe

Verwandte Themen