2013-05-01 4 views
1

У меня есть мнение в моей андроид приложение, которое я хотел бы, чтобы переключаться между visible/gone на небольших экранах, и visible/invisible в больших размерах. Начальная настройка (gone для небольших, invisible для больших экранов) выполняется с помощью двух отдельных файлов макета XML под layout и layout-sw600dp-land, но тогда, когда мне нужно динамически менять настройки видимости, как я могу определить из кода Java, какой из них выбирать по размеру экрана?Android набор View видимость программно в зависимости от размера экрана

Редактировать: в частности, я хочу, чтобы в моем коде было обнаружено то же самое условие, которое заставляет Android использовать макеты с layout-sw600dp-land. Я думал даже записать значение где-то в каталоге values-sw600dp-land, но не уверен, какой файл его включить и как получить доступ к нему.

+0

Просто из любопытства, почему вы должны сделать это динамически? –

+0

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

+0

Я вижу. Я собирался предложить использовать атрибут тега, но я вижу, что один из ответов в вопросе, связанный с ChrisCM, уже охватывает это. –

ответ

4

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

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

Тем не менее, ваш вопрос был неоднозначным относительно того, имел ли размер экрана пиксели или дюймы. Возможно, вам понадобится использовать значение dm.densityDpi, чтобы преобразовать значения от пикселей в дюймы, для более полезного вычисления «размера» экрана.

ANSER ДЛЯ правок:

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

How to programatically determine which XML layout my Android apps is using?

Во-вторых, не является решением, а скорее объяснение. Файл layout-sw600dp-land заменяет старое соглашение об именах pre 3.2, которое было похоже на этот макет-xlarge-land. Это, по сути, экранирует экран «xlarge» в режиме «пейзаж». Таким образом, вы можете обнаружить это программно, найдя размеры экрана xlarge, в которых ширина> высота. Ниже приведена хорошая ссылка на сравнение старого соглашения с новой «sw600dp» = наименьшая ширина - 600 dp.

http://developer.android.com/training/multiscreen/screensizes.html

Смежные вопросы