ImageButton не отображается после установки другого макета на видимое устройство

android onclicklistener visibility

65 просмотра

2 ответа

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

Странное поведение: на моем виртуальном устройстве оно работает нормально, но на реальном устройстве ImageButtonего снова не видно после того, LinearLayoutкак для него установлено значение 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>
Автор: Tobias Lukoschek Источник Размещён: 08.11.2019 11:04

Ответы (2)


1 плюс

Решение

как вы сказали, он работает на виртуальном устройстве, но не на реальном.

Вы установили параметры setLeft()и setRight()на огромные значения 1920 и 1720 соответственно. Это может быть выталкивание ImageButton из экрана вашего реального устройства в зависимости от пикселей дисплея вашего устройства.

Попробуйте использовать меньшие значения параметров для этих методов и посмотрите, отображает ли он отображаемые представления.

Автор: Muhammad Faisal Hyder Размещён: 20.08.2016 08:51

0 плюса

Получить высоту и ширину дисплея, используя

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

затем вычислите значения setRight и setLeft из ширины и высоты

Автор: Sabish.M Размещён: 20.08.2016 08:51
Вопросы из категории :
32x32