Android-макет с различными предметами на ландшафте и на портрете - PullRequest
2 голосов
/ 26 октября 2011

У меня есть main.xml в res / layout-land и в res / layout. Есть сетка из 12 иконок, 3 на 4 (ширина, высота соответственно). Если пользователь поворачивается в альбомной ориентации, я хочу отобразить его с помощью ViewPager 3 на 2 и 3 на 2 на двух страницах. Таким образом, в res / layout есть сетка из 12 элементов, а в res / layout-land есть ViewPager, для которого мне нужно предоставить PagerAdapter.

Мой вопрос: в предположении, что я работаю с configChanges = "direction", как мне это сделать? Или, более конкретно, где, например, я могу дать ViewPager его PagerAdapter?

Ответы [ 2 ]

1 голос
/ 26 октября 2011
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(display.getOrientation() == 0)
        setContentView(R.layout.main_portrait);
    else
        setContentView(R.layout.main_landscape); //getOrientation gives 1 here
}
0 голосов
/ 26 октября 2011

Вы можете создать два файла макета и в начале функции onCreate () (сразу после строки super.onCreate (bundle)) поместить оператор if / else вокруг этой строки:

setContentView(R.layout.main);

чтобы выглядеть так:

if(orientation==LANDSCAPE)
    setContentView(R.layout.main_landscape);
else
    setContentView(R.layout.main_portrait);

и с тех пор, где бы ваш Java-код не отличался, просто поместите его в одно и то же состояние. Немного скучно, если ваш java-код очень зависит от портрета, но я не могу придумать лучшего решения.

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

Надеюсь, это поможет

...