【问题标题】:ImageButton is not visible after other layout is set to visible on real deviceImageButton 在其他布局设置为在真实设备上可见后不可见
【发布时间】:2016-12-27 09:23:07
【问题描述】:

我有一个 ImageButton 将在单击后移动(实现 onClickListener)和一个 LinearLayout 在单击 ImageButton 时将设置为 可见(也在其onClick 方法)。

奇怪的行为:在我的虚拟设备上它工作正常,但在真实设备上@9​​87654325@ 设置为可见ImageButton 不再可见。我还将布局延迟(一秒钟)设置为 visible 并且 ImageButton 已正确移动,但正如我所说,它不再是 visible (当我设置它时)当LinearLayout 设置为可见时,显式在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>

【问题讨论】:

    标签: android onclicklistener visibility


    【解决方案1】:

    正如您所说,它适用于虚拟设备,但不适用于真实设备。

    您已将 setLeft()setRight() 的参数分别设置为 1920 和 1720 的巨大值。这可能会将 ImageButton 推出您的真实设备的屏幕,具体取决于您的设备包的显示像素。

    尝试对这些方法使用较小的参数值,看看它是否在显示上绘制视图。

    【讨论】:

      【解决方案2】:

      使用获取显示高度和宽度

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

      然后根据宽高计算setRight值和setLeft值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多