我有一个ImageButton
,点击它后会被移动(实现onClickListener),LinearLayout
将ImageButton
设置为可见 {{1}单击(也在其onClick方法中)。
奇怪的行为:在我的虚拟设备上,它可以正常工作,但在真实设备上,ImageButton
设置为可见后,LinearLayout
再次不可见< / em>的。我还将布局延迟(一秒钟)设置为可见并且ImageButton
已正确移动,但正如我所说它不再是可见(当我也当LinearLayout
设置为可见时
任何想法如何解决这个问题?
onClickListener
实现(我知道硬编码的值没有响应,但App仅适用于一个特定设备):
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>
答案 0 :(得分:1)
正如你所说,它适用于虚拟设备但不适用于真实设备。
您已将setLeft()
和setRight()
的参数分别设置为1920和1720的巨大值。这可能会将ImageButton推出真实设备的屏幕,具体取决于设备包装的显示器像素。
尝试使用较小的参数值参考这些方法并查看,是否在显示时绘制视图。
答案 1 :(得分:0)
使用
获取显示高度和宽度 DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
然后从宽度和高度计算setRight值和setLeft值