Intereting Posts
OnSharedPreferenceChanged называется несколько раз … почему? Фон PopupWindow иногда становится прозрачным и фиолетовым Поймать исключение из дочерней активности в родительской деятельности Возврат из диалога или действия с результатом Могу ли я сделать снимок экрана на домашнем экране программно, не укореня свое устройство Android? Создать слайдер для изменения объема Android? Как реализовать NestedScrolling на Android? Вложенный объект, который не читается Прекратите подключение Android к определенным Wi-Fi-сетям Предупреждение SVG-файла в редакторе Android Studio Android Layout выравнивает нижнюю Как использовать http / 2 с Okhttp на устройствах Android? (Вибрация TextView) Настройка атрибутов для пользовательских представлений Как сделать синхронизацию или сообщение Async HTTP / Get Как получить размер данных, полученных через EXTRA_STREAM, в приложении, обрабатывающем намерение отправить действие?

Контроль видимости видимости из ресурсов

У меня есть макет, содержащий два ImageViews. Я хочу, чтобы один из них был виден на портрете, а другой – в пейзаже. Как я могу достичь этого, используя ресурсы? (Я знаю, как установить его программно, но это конкретное использование, которое мне нужно для его достижения, используя ресурсы).

Я попробовал что-то вроде

В res / layout / may_layout.xml:

... <ImageView android:id="@+id/image1" android:visibility="@integer/visible_in_portrait" <<-- is this allowed? ... /> <ImageView android:id="@+id/image2" android:visibility="@integer/visible_in_landscape" ... /> 

В res / values ​​/ integers.xml:

 ... <!-- NOTE: 0 and 8 are VISIBLE and GONE respectively --> <integer name="visibile_in_portrait">0</integer> <integer name="visibile_in_landscape">8</integer> 

В res / values-land / integers.xml:

 ... <integer name="visibile_in_portrait">8</integer> <integer name="visibile_in_landscape">0</integer> 

Но при попытке надуть изображения я получаю ошибку времени выполнения (индекс из привязки). Когда я удаляю инструкции android: visibility, программа запускается, но я вижу оба изображения.

В: Каков способ использования ресурса в качестве значения для атрибута android: visibility?

(Если вы задаетесь вопросом, почему установка программно не поможет мне, это связано с автоматическим переключением ландшафтного / портретного переключателя виджетов приложений с растровыми изображениями файлов uri).

Solutions Collecting From Web of "Контроль видимости видимости из ресурсов"

Это будет возможно, когда вы используете этот трюк, добавьте свою линию видимости в стиль и поместите два экземпляра этого файла в режиме «Обычный» и «Обычный».

Я имею в виду, что в файле styles.xml в values папки помещается стиль с именем s1 и помещается android:visibility=visible в этом, а в styles.xml в values-land папки values-land помещает стиль с именем s1 и помещает android:visibility=gone .

Кроме того, в файле styles.xml в values папок помещается стиль с именем s2 и помещается android:visibility=gone в это, а в styles.xml в values-land папки values-land помещал стиль с именем s2 и помещал android:visibility=visible .

А затем установите s1 в первое представление изображения и s2 на второе.

Решение, данное уважаемым Кальвином, также является правильным, но когда у вас сложный макет, который может измениться во времени, наличие одного файла макета будет лучше, и ему будет меньше необходимости изменять.

Это старый вопрос, который уже принят, но следующее решение может помочь кому-то другому:

Если вы проверите res / values ​​/ attrs.xml в исходном коде Android, вы увидите определение свойства видимости следующим образом:

  <!-- Controls the initial visibility of the view. --> <attr name="visibility"> <!-- Visible on screen; the default value. --> <enum name="visible" value="0" /> <!-- Not displayed, but taken into account during layout (space is left for it). --> <enum name="invisible" value="1" /> <!-- Completely hidden, as if the view had not been added. --> <enum name="gone" value="2" /> </attr> 

Этот атрибут ожидает строковое значение (видимое, невидимое, ушедшее), которое будет преобразовано в (0, 1, 2) соответственно. Таким образом, вы можете объявить целочисленные ресурсы, содержащие эти значения следующим образом:

Значения / integers.xml

 <integer name="visible_in_portrait">2</integer> <!-- This is GONE --> 

Значения-земля / integers.xml

 <integer name="visible_in_landscape">0</integer> <!-- This is VISIBLE --> 

Однако, если вы хотите сделать это еще лучше, чтобы перестать гадать эти числовые константы каждый раз, вы можете сделать вот так:

Значения / integers.xml

 <!-- These are alias for the constants we'll reference below --> <integer name="view_visible">0</integer> <!-- This is VISIBLE --> <integer name="view_invisible">1</integer> <!-- This is INVISIBLE --> <integer name="view_gone">2</integer> <!-- This is GONE --> <integer name="visible_in_portrait">@integer/view_gone</integer> <!-- We're referencing the visibility alias we declared above --> 

Значения-земля / integers.xml

 <integer name="visible_in_landscape">@integer/view_visible</integer> 

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

Это невозможно. (Я попытался определить fill_parent как строку и использовать его для layout_width, и он тоже не работает.)

Почему бы вам не использовать 2 макета?

  1. разреш / макет / may_layout.xml
  2. разреш / макет земля / may_layout.xml

Каждый из них определяет правильное изображение.

Кроме того, наличие ценностей-земли может вызвать проблемы, когда вам необходимо поддерживать несколько языков. (Для каждого языка вам необходимо иметь значение-xx-land)