Я создал несколько пользовательских элементов и хочу программно разместить их в верхнем правом углу ( n
пиксели от верхнего края и m
пиксели от правого края). Поэтому мне нужно получить ширину экрана и высоту экрана, а затем установить положение:
int px = screenWidth - m;
int py = screenHeight - n;
Как мне попасть screenWidth
и screenHeight
в основное занятие ?
getMetrics
. Комментарий Ника в его ответе даже объясняет,getDisplayMetrics
как учитывать размер системы / строки состояния. Также вы можете использовать плотность, как объяснили jmaculate и LoungeKatt, чтобы иметь значение EXACT :DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels;
протестировано в Android v2.2 (API 8) и v4.0 с хорошими результатами и без ошибок / предупреждений .Resources.getSystem().getDisplayMetrics()
. Вам не понадобится,Context
чтобы получить их.Ответы:
Если вы хотите размеры экрана в пикселях, вы можете использовать
getSize
:Если вы не в,
Activity
вы можете получить значениеDisplay
по умолчанию черезWINDOW_SERVICE
:Если вы находитесь во фрагменте и хотите выполнить это, просто используйте Activity.WindowManager (в Xamarin.Android) или getActivity (). GetWindowManager () (в java).
Перед тем как
getSize
был введен (в уровне API 13), вы можете использоватьgetWidth
иgetHeight
методы, которые в настоящее время устарели:Однако для описываемого вами варианта использования поле / отступ в макете кажется более подходящим.
Другой способ: DisplayMetrics
Мы можем использовать
widthPixels
для получения информации для:Пример:
источник
try/catch
для такой проверки? Почему бы просто не использоватьif (android.os.Build.VERSION.SDK_INT >= 13)
без каких-либо исключений вообще? Вtry/catch
нормальном потоке приложений я считаю плохую практику.Одним из способов является:
Это устарело, и вместо этого вы должны попробовать следующий код. Первые две строки кода дают вам
DisplayMetrics
цели. Эти объекты содержат поля , какheightPixels
,widthPixels
.источник
Возможно, он не отвечает на ваш вопрос, но было бы полезно знать (я сам искал его, когда пришел к этому вопросу), что если вам нужно измерение View, но ваш код выполняется, когда его макет еще не выложен (например, в
onCreate()
), вы можете настроитьViewTreeObserver.OnGlobalLayoutListener
сView.getViewTreeObserver().addOnGlobalLayoutListener()
и поместить соответствующий код, который нуждается в измерении представления там. Обратный вызов слушателя будет вызван, когда макет будет размечен.источник
View.post()
что работа не гарантируется? Мне любопытно, потому что я также полагаюсь на этот метод для получения размера представления после макета и не знал, что это ненадежно.View
вы получаетеViewTreeObserver
? Или они все делят один и тот же?(Ответ 2012 г., возможно, устарел). Если вы хотите поддерживать предварительно Honeycomb, вам нужно будет установить обратную совместимость до API 13. Что-то вроде:
Конечно, устаревшие методы в конечном итоге будут удалены из самых последних SDK, но, хотя мы по-прежнему полагаемся на большинство наших пользователей, имеющих Android 2.1, 2.2 и 2.3, это то, что нам осталось.
источник
Я безуспешно перепробовал все возможные «решения» и заметил, что приложение «Dalvik Explorer» Эллиотта Хьюза всегда показывает правильный размер на любом устройстве Android / версии ОС. В итоге я посмотрел на его проект с открытым исходным кодом, который можно найти здесь: https://code.google.com/p/enh/
Вот весь соответствующий код:
РЕДАКТИРОВАТЬ: слегка улучшенная версия (избегать исключений запуска на не поддерживаемой версии ОС):
источник
Самый простой способ:
источник
Для доступа к высоте строки состояния для устройств Android мы предпочитаем программный способ получить ее:
Образец кода
Переменная
result
дает высоту в пикселе.Для быстрого доступа
Для получения дополнительной информации о высоте
Title bar
,Navigation bar
иContent View
, любезно взгляд на Android экран устройства Размеры .источник
getResources().getDisplayMetrics().heightPixels + result
дает фактическую высоту полного экрана. Ответ Драгана Марьяновича также работает, но я предпочитаю это гораздо более короткое и простое решение.OnApplyWindowInsetsListener
.Сначала получите представление (например, by
findViewById()
), а затем вы можете использовать getWidth () для самого представления.источник
У меня есть две функции, одна для отправки контекста, а другая для получения высоты и ширины в пикселях:
а также
источник
@SuppressLint("NewApi")
чуть выше сигнатуру функции, чтобы иметь возможность компилировать.Для динамического масштабирования с использованием XML есть атрибут под названием «android: layout_weight»
Приведенный ниже пример, модифицированный по ответу synic в этой теме , показывает кнопку, занимающую 75% экрана (вес = .25), и текстовое представление, занимающее оставшиеся 25% экрана (вес = .75).
источник
Вот код, который я использую для задачи:
Кажется достаточно чистым и все же, заботится об амортизации.
источник
Разве это не намного лучшее решение? DisplayMetrics поставляется со всем необходимым и работает с API 1.
Вы также можете получить фактическое отображение (включая декоры экрана, такие как строка состояния или панель программного обеспечения), используя getRealMetrics , но это работает только на 17+.
Я что-то пропустил?
источник
Просто добавлю к ответу Франческо. Другим более подходящим наблюдателем, если вы хотите узнать местоположение в окне или местоположение на экране, является ViewTreeObserver.OnPreDrawListener ()
Это также может быть использовано для поиска других атрибутов представления, которые в основном неизвестны во время onCreate (), например прокручиваемая позиция, масштабированная позиция.
источник
Используя следующий код в Activity.
источник
Найдите ширину и высоту экрана:
Используя это, мы можем получить последнюю версию SDK 13 и выше.
источник
источник
Я нашел, что сделал свое дело.
источник
Нужно сказать, что если вы не в
Activity
, а вView
(или у вас есть переменнаяView
типа в вашей области видимости), нет необходимости использоватьWINDOW_SERVICE
. Тогда вы можете использовать как минимум два способа.Первый:
Во-вторых:
Все эти методы, которые мы здесь называем, не устарели.
источник
источник
Для получения размеров экрана используйте отображение метрик
Получите высоту и ширину в пикселях
источник
Это не ответ для ОП, так как он хотел, чтобы размеры дисплея были в реальных пикселях. Я хотел размеры в «независимых от устройства пикселях», и собирал ответы отсюда https://stackoverflow.com/a/17880012/253938 и вот https://stackoverflow.com/a/6656774/253938 Я подошел с этим:
источник
Вы можете получить размер высоты, используя:
и размер ширины с помощью
источник
Существует не осуждаемый способ сделать это с помощью DisplayMetrics (API 1), который позволяет избежать путаницы в попытках / отлове:
источник
Я бы обернул код getSize следующим образом:
источник
Для тех, кто ищет полезные размеры экрана без строки состояния и панели действий (также благодаря ответу Swapnil):
источник
Сначала загрузите файл XML, а затем напишите этот код:
Показать ширину и высоту в соответствии с вашим разрешением экрана.
источник
Следуйте методам ниже:
источник
Котлин
источник
Есть моменты, когда вам нужно знать точные размеры доступного пространства для макета в onCreate действия. После некоторых размышлений я разработал этот способ сделать это.
Если по какой-то причине вы не хотите добавлять другое действие в манифест Android, вы можете сделать это следующим образом:
источник
Если вам не нужны служебные данные WindowManager, Points или Displays, вы можете получить атрибуты высоты и ширины самого верхнего элемента View в XML-файле, если для его высоты и ширины установлено значение match_parent. (Это верно, если ваш макет занимает весь экран.)
Например, если ваш XML начинается примерно так:
Затем
findViewById(R.id.entireLayout).getWidth()
вернет ширину экрана иfindViewById(R.id.entireLayout).getHeight()
вернет высоту экрана.источник