2016-07-01 5 views
-1

В основном моя цель состоит в том, чтобы установить некоторые пользовательские 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 в коде ты)

Или есть лучший способ достичь своей цели, и я просто делаю это неправильно с самого начала?

Пожалуйста, помогите мне.

+0

@MaximG, спасибо за ответ, но происходит введение броска я не совсем понимаю, как это может помочь мне. Для некоторых клирингов: мне нужно, чтобы 1/3 и 1/6 любого экрана зависели от ориентации. Можно ли здесь? Потому что то, что я вижу на экранах, - это просто значение dp для размера –

+0

Пробовали ли вы с помощью treeviewobserver? – Memme

ответ

1

сначала я бы сказал, чтобы не использовать android:configChanges="orientation|screenSize" в этой ситуации. Это не имеет никакого смысла в пользовательском представлении.

Во-вторых, я считаю, что основная ошибка заключается в том, как вы захватываете 3 или 6 значений. Как вы можете добиться этого гораздо проще с использованием XML.

res/values/integers.xml 
    <integer name="view_fraction">3</integer> 
res/values-land/integers.xml 
    <integer name="view_fraction">6</integer> 

Тогда во время вашего просмотра конструктора вы просто звоните:

int val = context.getResources().getInteger(R.integer.view_fraction) 

Кроме того, я предложу некоторые другие предложил улучшить расчет вашего размера зрения, предлагая вам просто использовать код, который Google предоставляет нам , вместо того, чтобы пытаться перекодировать его. Использование классов из android.support.percent

Если ваш пользовательский вид простирается от FrameLayout или RelativeLayout я хотел бы предложить вам вместо простираться от их процентного аналога PercentFrameLayout и PercentRelativeLayout.

Если пользовательский вид не простирается от одного из них, вы можете использовать их помощник PercentLayoutHelper, следуя руководству на своей странице.

Таким образом, вы можете легко динамически Ассинг процент размера вид на макете XML

+0

О процентном соотношении: это немного сложно, как вы видите, этот мой взгляд является элементом RecyclerView, и еще больше я могу поместить мой RecyclerView в PercentageLayout и установить его размер, но это будет только высота представления, и ширина должна быть одинаковой, это ImageView, который должен изменить размер загруженного изображения в зависимости от ориентации экрана в нужный момент, поэтому для ширины мне нужно будет переопределить onMeaseure и в любом случае предоставить мой код, я надеюсь, вы поймете, я попробую предложить ресурсы теперь, и предоставит информацию о том, как это работает, спасибо за ответ –

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

  • Нет связанных вопросов^_^