2016-08-20 6 views
0

У меня есть ImageButton, который будет перемещен после того, как была нажата (onClickListener реализуется) и LinearLayout, который будет установлен в видимой когда ImageButton щелкнул (также в методе onClick).ImageButton не видно после того, как другой макет является видимым на реальном устройстве

Странное поведение: На моем виртуальном устройстве он работает нормально, но на реальном устройстве ImageButton не виден снова после того, как LinearLayout установлен в видимой. Я также установить макет отсроченный (с вторым) для видимой и ImageButton был перенесен правильно, но, как я сказал, что это не видно снова (также, когда я поставил его в явном виде на VISIBLE), когда LinearLayout был установлен в видимом)

Любые идеи по устранению этой проблемы?

onClickListener реализация (я знаю, что жестко закодированные значения нечувствительны, но приложение работает только для одного конкретного устройства):

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

Get Display Высота и ширина, используя

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

тогда вычислите значение setRight и setLeft значение по ширине и высоте