Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
#1

Как установить программного ориентацию для разных экранов? - Программирование Android

13.12.2015, 13:07. Просмотров 380. Ответов 11
Метки нет (Все метки)

Здравствуйте!
Для своей программы хочу такую логику: для телефонов ориентация только вертикальная, а для планшетов - только горизонтальную.
Как можно это реализовать программно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2015, 13:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как установить программного ориентацию для разных экранов? (Программирование Android):

Подскажите как сделать разметку для разных экранов - Программирование Android
У меня есть recyclerview в него устанавливается GridLayoutManager в 3 колонки, есть разметка itemа для этого списка. Item внутри себя...

CustomView разные изображения для разных экранов - одна система координат - Как? - Программирование Android
Есть изображение, карта, на ней я должен в координатах размещать объекты. Изображения разные: hdpi, ldpi, mdpi и так далее. Когда я...

Dimens для разных экранов - Программирование Android
Я хочу сделать для разных экранов разный размер шрифта. Как бы мне это сделать? Я создал папку values-sw480dp-hdpi для экрана HTC One V(на...

Разметка для разных экранов - Программирование Android
У меня такой вопрос как сделать разметку для разных размеров экранов наиболее оптимально. Ну если в проекте создавать кучу папок и...

Какого размера делать персонажа для разных экранов Android? - Программирование Android
Какого размера делать персонажа для разных экранов Android? В игре будет два динамических спрайта. Они должны масштабироваться под разные...

Поясните про поддержку разных экранов - Программирование Android
Я туплю или эмулятор глючит ? В genymotion сделал 3 устройства, что бы поиграться разными layout для разных экранов: 1. 480х800 2....

11
Pablito
2507 / 1991 / 620
Регистрация: 12.05.2014
Сообщений: 6,954
Завершенные тесты: 1
13.12.2015, 15:29 #2
да легко
1. создаем в папке res/values файл, например с названием booleans.xml с таким содержимым
XML
1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isPhone">true</bool>
</resources>
2. создаем папку res/values-sw600dp (или она уже создана) и копируем туда наш файл booleans.xml
3. меняем там значение переменной на false
4. в onCreate() после setContentView() пишем
Java
1
2
3
4
5
        if (getResources().getBoolean(R.bool.isPhone)) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
5. PROFIT
2
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
15.12.2015, 09:22 #3
Цитата Сообщение от Ханасака Посмотреть сообщение
а для планшетов - только горизонтальную.
планшеты разные бывают, было бы логичнее что бы код определял какая сторона шире и исходя из этого устанавливать ориентацию
0
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
15.12.2015, 18:01  [ТС] #4
Цитата Сообщение от Valakin Посмотреть сообщение
планшеты разные бывают, было бы логичнее что бы код определял какая сторона шире и исходя из этого устанавливать ориентацию
Согласен! А как определять, какая сторона шире?
0
Pablito
2507 / 1991 / 620
Регистрация: 12.05.2014
Сообщений: 6,954
Завершенные тесты: 1
15.12.2015, 18:05 #5
а я не согласен
при смене ориентации система сама решает какую разметку взять - вертикальную или горизонтальную
при запуске на разных устройствах опять же система сама решает из какой папки брать разметку
1
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
24.12.2015, 23:25  [ТС] #6
Вот чего-то нашел...
Java
1
2
3
4
boolean isLarge() {
        return (getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }
0
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
08.09.2016, 14:08  [ТС] #7
При вызове setRequestedOrientation вызывается еще раз onCreate(), что не есть гуд
0
Pablito
2507 / 1991 / 620
Регистрация: 12.05.2014
Сообщений: 6,954
Завершенные тесты: 1
08.09.2016, 14:12 #8
это не есть гуд потому что там наверняка куча кода, которого там быть не должно
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,612
08.09.2016, 15:13 #9
Паблито, может вместо booleans.xml использовать styles.xml и в манифесте просто использовать их что бы программно ничего не махать?
0
Pablito
2507 / 1991 / 620
Регистрация: 12.05.2014
Сообщений: 6,954
Завершенные тесты: 1
08.09.2016, 16:13 #10
Цитата Сообщение от vxg Посмотреть сообщение
может вместо booleans.xml использовать styles.xml и в манифесте просто использовать
не совсем понял мысль
вполне возможно что код и не нужен, это было много месяцев назад и я до сих пор еще очень много не знаю )
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,612
08.09.2016, 17:17 #11
Паблито, я про то что если уж делать через ресурсы, а не через простой анализ "что это за аппарат", то возможно можно просто назначить активити тему, сами темы поместить в файл стилей, а файлы стилей раскидать по устройствам (при этом для каких-то устройств прописывать в тему фиксированную ориентацию, не знаю правда реализуемо ли такое, просто натолкнуло на мысль когда вы стали разбрасывать по устройствам файлы с флажками)
0
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
08.09.2016, 21:19  [ТС] #12
Цитата Сообщение от Паблито Посмотреть сообщение
потому что там наверняка куча кода, которого там быть не должно
Не пихать же его в onResume

Лучшее, что нашел - это вызывать setRequestedOrientation до setContentView. В таком случае onCreate второй раз не отрабатывет...
0
08.09.2016, 21:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2016, 21:19
Привет! Вот еще темы с ответами:

Как подготовить изображение для всех видов и типов экранов - Программирование Android
как подготовить изображение для всех видов и типов экранов? то есть подготовить по разным разрешениям и density. вот создал я...

Как заблокировать альбомную ориентацию? - Программирование Android
Как заблокировать альбомную ориентацию, но не во всем приложении, а только в определенных классах?...

Как определить правильную ориентацию фотографии? - Программирование Android
На одном устройстве правильная ориентация фото получается при её повороте (Camera.Parameters::setRotation(int rotation) на 90 градусов, на...

Как сделать приложение под все виды экранов - Программирование Android
Здравствуйте уважаемые форумчане! Кто-нибудь может подсказать, как сделать приложение под все виды экранов или поделиться хорошей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru