2016-08-20 3 views
0

に可視に設定された後のImageButton私はImageButtonが(クリックすると可視に設定され、それがクリックされた後に移動するImageButton(onClickListenerが実装されている)とLinearLayoutを持って表示されていませんonClickメソッドでも同様です)。他のレイアウトは、実デバイス

奇妙な行動:私の仮想デバイスでそれが正常に動作しますが、実際のデバイス上でImageButtonLinearLayout見えるに設定された後に再び表示されません。 LinearLayout可視としたとき、私は(また、Iが可視で明示的に設定した場合)にも可視に(秒で)遅延レイアウトを設定し、ImageButtonが正しく移動させたが、私はそれが再び見えないと述べたように

この問題を解決する方法はありますか?

onClickListener実装(私はハードコードされた値が応答しないが、アプリケーションは1つの特定のデバイスのために働く知っている):

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

とXMLレイアウト:

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

答えて

1

あなたは仮想デバイスでは動作しますが、実際のデバイスでは動作しないと言っています。

setLeft()setRight()のパラメータをそれぞれ1920と1720の巨大な値に設定しました。これは、デバイスがパックしているディスプレイのピクセルに応じて、実際のデバイスの画面からImageButtonを押し出している可能性があります。

これらのメソッドのパラメタの値を小さくして表示すると、ビューに表示されます。

0

を使用してディスプレイの高さと幅を取得します。

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

次に、setRight値とsetLeft値は幅と高さから

関連する問題