将其他布局设置为在真实设备上可见后,ImageButton 不可见
ImageButton is not visible after other layout is set to visible on real device
我有一个 ImageButton
将在单击后移动(已实现 onClickListener)和一个 LinearLayout
将设置为 visible 时ImageButton
单击(也在其 onClick 方法中)。
奇怪的行为: 在我的虚拟设备上它工作正常但在真实设备上 ImageButton
在 LinearLayout
设置为可见。我还将布局延迟(一秒钟)设置为 visible 并且 ImageButton
已正确移动,但正如我所说,它不是 visible 当 LinearLayout
设置为 visible 时再次(也是当我将其明确设置为 VISIBLE 时)
有解决此问题的想法吗?
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>
使用
获取显示高度和宽度
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
然后根据宽度和高度计算setRight值和setLeft值
如您所说,它适用于虚拟设备,但不适用于真实设备。
您已将 setLeft()
和 setRight()
的参数分别设置为巨大的值 1920 和 1720。这可能会将 ImageButton 推出真实设备的屏幕,具体取决于设备包的显示像素。
尝试对这些方法使用较小的参数值,看看它是否绘制了显示的视图。
我有一个 ImageButton
将在单击后移动(已实现 onClickListener)和一个 LinearLayout
将设置为 visible 时ImageButton
单击(也在其 onClick 方法中)。
奇怪的行为: 在我的虚拟设备上它工作正常但在真实设备上 ImageButton
在 LinearLayout
设置为可见。我还将布局延迟(一秒钟)设置为 visible 并且 ImageButton
已正确移动,但正如我所说,它不是 visible 当 LinearLayout
设置为 visible 时再次(也是当我将其明确设置为 VISIBLE 时)
有解决此问题的想法吗?
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>
使用
获取显示高度和宽度 DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
然后根据宽度和高度计算setRight值和setLeft值
如您所说,它适用于虚拟设备,但不适用于真实设备。
您已将 setLeft()
和 setRight()
的参数分别设置为巨大的值 1920 和 1720。这可能会将 ImageButton 推出真实设备的屏幕,具体取决于设备包的显示像素。
尝试对这些方法使用较小的参数值,看看它是否绘制了显示的视图。