В основном моя цель состоит в том, чтобы установить некоторые пользовательские View
размер точно 1/3 экрана для portrait
ориентации и 1/6 для landscape
Всегда надежную ориентацию
Первая мысль, которая пришла мне в голову это просто вычислить некоторые mSize
переменной и установите его на View
в OnMeasure
как это:
mSize = (AContext.getScreenSize().x/(orientation == Configuration.ORIENTATION_PORTRAIT ? 3 : 6)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(mSize|MeasureSpec.EXACTLY, mSize|MeasureSpec.EXACTLY);
}
и это работает прекрасно, пока я не повернуть экран. Дело в том, что, когда экран вращается View
инициализации и калибровки называются перед тем значение orientation
будет на самом деле изменить, так что результат в том, что она идет от одной трети до landscape
также, если он был открыт с portrait
ориентации, во-первых, и другие наоборот.
Я знаю, что я могу сделать что-то вроде:
android:configChanges="orientation|screenSize"
В AndroidManifest
моей Activity
и переопределить onConfigurationChanged
для обработки вращения и изменений mSize
значения, но, отключает автоматический выбор между portrait
и landscape
макеты (от .xml
файлов на inflating
). Так что я получаю тот же файл xml
для обеих ориентаций.
Есть ли способ сохранить orientation
значение от context.getResources().getConfiguration().orientation
?
Или мне нужно сделать некоторые обходной путь с onConfigurationChange
для того, чтобы макет выбора? (я не хочу, чтобы это сделать maually в коде ты)
Или есть лучший способ достичь своей цели, и я просто делаю это неправильно с самого начала?
Пожалуйста, помогите мне.
@MaximG, спасибо за ответ, но происходит введение броска я не совсем понимаю, как это может помочь мне. Для некоторых клирингов: мне нужно, чтобы 1/3 и 1/6 любого экрана зависели от ориентации. Можно ли здесь? Потому что то, что я вижу на экранах, - это просто значение dp для размера –
Пробовали ли вы с помощью treeviewobserver? – Memme