С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Ханасака
10 / 10 / 1
Регистрация: 12.07.2013
Сообщений: 147
1

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

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

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

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

CustomView разные изображения для разных экранов - одна система координат - Как?
Есть изображение, карта, на ней я должен в координатах размещать объекты....

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

Dimens для разных экранов
Я хочу сделать для разных экранов разный размер шрифта. Как бы мне это сделать?...

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

11
Pablito
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 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
434 / 100 / 15
Регистрация: 21.02.2015
Сообщений: 789
15.12.2015, 09:22 3
Цитата Сообщение от Ханасака Посмотреть сообщение
а для планшетов - только горизонтальную.
планшеты разные бывают, было бы логичнее что бы код определял какая сторона шире и исходя из этого устанавливать ориентацию
0
Ханасака
10 / 10 / 1
Регистрация: 12.07.2013
Сообщений: 147
15.12.2015, 18:01  [ТС] 4
Цитата Сообщение от Valakin Посмотреть сообщение
планшеты разные бывают, было бы логичнее что бы код определял какая сторона шире и исходя из этого устанавливать ориентацию
Согласен! А как определять, какая сторона шире?
0
Pablito
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 1
15.12.2015, 18:05 5
а я не согласен
при смене ориентации система сама решает какую разметку взять - вертикальную или горизонтальную
при запуске на разных устройствах опять же система сама решает из какой папки брать разметку
1
Ханасака
10 / 10 / 1
Регистрация: 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 / 1
Регистрация: 12.07.2013
Сообщений: 147
08.09.2016, 14:08  [ТС] 7
При вызове setRequestedOrientation вызывается еще раз onCreate(), что не есть гуд
0
Pablito
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 1
08.09.2016, 14:12 8
это не есть гуд потому что там наверняка куча кода, которого там быть не должно
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
08.09.2016, 15:13 9
Паблито, может вместо booleans.xml использовать styles.xml и в манифесте просто использовать их что бы программно ничего не махать?
0
Pablito
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 1
08.09.2016, 16:13 10
Цитата Сообщение от vxg Посмотреть сообщение
может вместо booleans.xml использовать styles.xml и в манифесте просто использовать
не совсем понял мысль
вполне возможно что код и не нужен, это было много месяцев назад и я до сих пор еще очень много не знаю )
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
08.09.2016, 17:17 11
Паблито, я про то что если уж делать через ресурсы, а не через простой анализ "что это за аппарат", то возможно можно просто назначить активити тему, сами темы поместить в файл стилей, а файлы стилей раскидать по устройствам (при этом для каких-то устройств прописывать в тему фиксированную ориентацию, не знаю правда реализуемо ли такое, просто натолкнуло на мысль когда вы стали разбрасывать по устройствам файлы с флажками)
0
Ханасака
10 / 10 / 1
Регистрация: 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

Поясните про поддержку разных экранов
Я туплю или эмулятор глючит ? В genymotion сделал 3 устройства, что бы...

Как подготовить изображение для всех видов и типов экранов
как подготовить изображение для всех видов и типов экранов? то есть подготовить...

Фоновое изображение для различных экранов
Здравствуйте. Необходимо в активити вставить в качестве фона изображение. Оно...


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

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

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