Земля Android Layout не работает

Я искал проблемы в stackoverflow и пробовал все, что видел, но макет не работает. В моем коде есть и метод onConfigurationChanged

@Override
 public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);           
}

И файл манифеста:

<activity
        android:name="com.sde.PlayerTrack"
        android:theme="@style/AppTheme"
        android:configChanges="orientation|keyboardHidden|screenSize"
        >
    </activity>

Я также попытался удалить в записи манифеста Android: configChanges, а затем загрузку макета, но компоненты, которые у меня есть (TextView, полоса прокрутки...), не работают должным образом.

Не могли бы вы мне помочь?


person Garmael    schedule 18.03.2014    source источник


Ответы (5)


Удалите orientation из android:configChanges в файле манифеста и поместите файл xml с альбомной ориентацией в папку layout-land.

person Cheerag    schedule 18.03.2014
comment
Я уже делал это раньше, и это работает, но у меня индикатор прогресса не работает должным образом. Спасибо. - person Garmael; 18.03.2014
comment
с какой именно проблемой вы столкнулись с индикатором прогресса, можете ли вы объяснить подробно? - person Cheerag; 19.03.2014
comment
У меня есть асинхронный класс, который загружает песню, просто запуская действие. Потом при повороте экрана срабатывает макет земли но песня не непрерывная а перезагружается. - person Garmael; 19.03.2014
comment
Таким образом, вы перезагрузите данные. Нехорошо. Я хочу, чтобы при повороте экрана не перезагружались данные, которые автоматически выбирают макет в папке layout-land или layout-port. Помогите мне, пожалуйста. - person MrSiro; 14.05.2016

Наконец, мое решение:

Файл AndroidManifest.xml:

<activity
        android:name="activity.name"
        android:configChanges="orientation|keyboardHidden|screenSize"       
        >

И в активности реализуем метод onConfigurationChanged (Конфигурация newconfig):

@Override
 public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);     
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            createHorizontalalLayout();            
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            createVerticalLayout();             
        }
}

С помощью createVerticalLayout() и createHorizontalLayout() программно делаем макеты.

person Garmael    schedule 26.03.2014

Для меня недостающим элементом была чистая сборка. Почему-то мои изменения не отражались. Вот шаги, которые я выполнил.

  1. создание папки layout-land параллельно папке layout.

  2. копирование activity_main.xml в папку layout-land и изменение activity_main.xml для горизонтального макета.

  3. Важно, чтобы вы могли просматривать оба макета в режиме конструктора. Когда вы переходите к представлению дизайна файла макета, вы видите значок мобильного поворота. Вы должны иметь возможность переключаться между предварительными просмотрами макета с помощью этого значка. Если вы можете переключаться, это означает, что ваша структура папок правильная. Вы даже можете сделать шаг 1 и шаг 2, используя это. Убедитесь, что вы исправили ошибки макета.

  4. Ваш AndroidManifest.xml не должен иметь элемент ориентации в атрибуте android:configChanges=

Для меня пока пусто

<activity android:name="com.sudoxer.app.MainActivity" android:configChanges="">
  1. Очистите проект и перестройте его после этого изменения.

Вы должны увидеть то, что ожидаете.

person Sandeep Dixit    schedule 02.10.2020

Проверьте эмулятор, если вы используете эмулятор Android 4.4, у него есть какая-то ошибка в его ориентации. У меня была такая же проблема, поменял эмулятор на 4.0.3 и все заработало нормально. Подробнее см. на сайте.

person wayzz    schedule 30.09.2014

У меня была эта проблема, и после долгих отладок я нашел виновника в файле build.gradle. Студия Android добавила строку

sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res/layout-land'] } }

пока я возился, пытаясь создать layout-land вручную. Я удалил эту строку, и нормальная функция вернулась.

person Calvin J    schedule 29.11.2017