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

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

Войти
Регистрация
Восстановить пароль
 
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
#1

Разная разметка для разных разрешений - Программирование Android

15.09.2014, 20:09. Просмотров 1104. Ответов 11
Метки нет (Все метки)

Как сделать так, чтобы для экрана с разрешением 400х800 был свой layout файл, а для разрешения 1920х1080 свой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2014, 20:09     Разная разметка для разных разрешений
Посмотрите здесь:
Разметка для разных экранов Android
Разная задержка rstp-потока на разных устройствах Android
Android Вызвать страницу разрешений для приложения в Android 6
Какой дизайн разрешения необходим для поддержки всех разрешений Android
Разметка для RadioGroup Android
Android Разметка для размера hdpi в ландшафтной ориентации
Android JSOUP POST. В ответ вместо JSon приходит разметка страницы с полями для ввода данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
15.09.2014, 22:11     Разная разметка для разных разрешений #2
Указывать размеры (в dimens.xml) в папках values-hdpi, values-ldpi и т.д. Изображения разного размера в папках drawable.
Или вопрос в другом?
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,238
21.06.2016, 11:22     Разная разметка для разных разрешений #3
Я хотел спросить тоже по этой теме. Мне тоже нужно получить разные layout файлы для разных разрешений. Нашел такое решение вынести размеры элементов и шрифтов в dimens а сами файлы dimens раскидать по папкам
values-sw320dp-xhdpi
values-sw600dp-xhdpi
values-sw720dp-xhdpi
values-sw320dp-xxhdpi
values-sw600dp-xxhdpi
values-sw720dp-xxhdpi
values-sw320dp-xxxhdpi
values-sw600dp-xxxhdpi
values-sw720dp-xxxhdpi

У меня есть несколько вопросов: Во первых что означает префикс sw, а если было бы просто w то чем отличалось бы? Во вторых почему здесь задается только один размер, например 320 - что он означает и где второй размер (или это диагональ устройства)? И потом как система поймет для какого именно разрешения устройства применить те или иные размеры? То есть сам layout файл может быть один, ну а в dimens мы просто задаем размеры которые система будет подставлять для соответствующей конфигурации экрана так?
Pablito
2403 / 1848 / 579
Регистрация: 12.05.2014
Сообщений: 6,577
Завершенные тесты: 1
21.06.2016, 11:24     Разная разметка для разных разрешений #4
Цитата Сообщение от yura91 Посмотреть сообщение
У меня есть несколько вопросов: Во первых что означает префикс sw
https://developer.android.com/guide/...s_support.html
потрудись прочитать это внимательно, там есть ответы на все вопросы
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,238
21.06.2016, 18:25     Разная разметка для разных разрешений #5
Да я перенес размеры в папку dimens создал папку, которая называется values-sw768dp-xhdpi
в ней файл dimens с такой разметкой
XML
1
2
3
4
5
6
7
8
<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="layout_marginLeft">5dp</dimen>
    <dimen name="layout_marginRight">5dp</dimen>
    <dimen name="layout_height">35dp</dimen>
    <dimen name="textSize">14sp</dimen>
    <dimen name="layout_marginTop">3dp</dimen>
</resources>
Вот сама разметка активити
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1">
 
    <TextView
        android:layout_height="@dimen/layout_height"
        android:layout_width="match_parent"
        android:layout_marginLeft="@dimen/layout_marginLeft"
        android:layout_marginRight="@dimen/layout_marginRight"
        android:textSize="@dimen/textSize"
        android:background="#5F00"
        android:layout_marginTop="@dimen/layout_marginTop"
        android:id="@+id/tvResult1"
        android:gravity="center">
    </TextView>
 
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginLeft="@dimen/layout_marginLeft"
        android:layout_marginRight="@dimen/layout_marginRight"
        android:text="FEED"
        android:textSize="@dimen/textSize"
        android:layout_marginTop="@dimen/layout_marginTop"
        android:id="@+id/tvResult2"
        android:gravity="center_horizontal">
    </TextView>
 
    <TextView
        android:layout_height="@dimen/layout_height"
        android:layout_width="match_parent"
        android:layout_marginLeft="@dimen/layout_marginLeft"
        android:layout_marginRight="@dimen/layout_marginRight"
        android:background="#5F00"
        android:onClick="onclick"
        android:textSize="@dimen/textSize"
        android:layout_marginTop="@dimen/layout_marginTop"
        android:id="@+id/tvResult3"
        android:gravity="center">
    </TextView>
 
 <TextView
     android:layout_height="@dimen/layout_height"
     android:layout_width="match_parent"
     android:layout_marginLeft="@dimen/layout_marginLeft"
     android:layout_marginRight="@dimen/layout_marginRight"
     android:background="#5F00"
     android:onClick="onclick"
     android:textSize="@dimen/textSize"
     android:layout_marginTop="@dimen/layout_marginTop"
     android:id="@+id/tvResult4"
     android:gravity="center">
 </TextView>
 
 <TextView
     android:layout_height="@dimen/layout_height"
     android:layout_width="match_parent"
     android:layout_marginLeft="@dimen/layout_marginLeft"
     android:layout_marginRight="@dimen/layout_marginRight"
     android:background="#5F00"
     android:onClick="onclick"
     android:textSize="@dimen/textSize"
     android:layout_marginTop="@dimen/layout_marginTop"
     android:id="@+id/tvResult5"
     android:gravity="center">
 </TextView>
 
</LinearLayout>
 
    </ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
Потом создал устройство Genymotion 768 на 1280 и плотностью 320 dp. Ну и в итоге размеры из файла dimens, который я создал в папке values-sw768dp-xhdpi в него не добавляются, а добавляются только размеры из dimens, который находится просто в values(то есть от values-sw768dp-xhdpi толку никакого нет). Почему такое происходит?
Pablito
2403 / 1848 / 579
Регистрация: 12.05.2014
Сообщений: 6,577
Завершенные тесты: 1
21.06.2016, 18:31     Разная разметка для разных разрешений #6
Цитата Сообщение от yura91 Посмотреть сообщение
Почему такое происходит?
я бы написал почему, но мне влепят предупреждение
перечитай еще пару раз ссылку
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,238
21.06.2016, 19:00     Разная разметка для разных разрешений #7
Извините я просто плохо знаю английский и не все слова сразу могу уловить. Хорошо перечитаю.
Pablito
2403 / 1848 / 579
Регистрация: 12.05.2014
Сообщений: 6,577
Завершенные тесты: 1
21.06.2016, 19:13     Разная разметка для разных разрешений #8
Цитата Сообщение от yura91 Посмотреть сообщение
Genymotion 768 на 1280 и плотностью 320 dp.
разрешение экрана и плотность - разные вещи
768 на 1280 при плотности 320dp это экран примерно 4.7 дюйма диагональ

а модификатор sw768dp говорит что в папке заданы размеры для экрана минимальной ширины 768 ДЭПЭ, то есть при плотности 320 точек на дюйм этот экран имеет 1280 / 2 = 640dp (ДЭПЕ, не точек) ширину, если был создан как планшет а не телефон

если надо задать размеры для планшетов отдельно то проще всего создать папку values-sw600dp без всяких там xhdpi и т.д.
и вирутальное устройство надо создавать правильное что бы это все проверить

я уже слышу - "а как создавать правильное устройство покажите пожалуйста"
просто - выбрать любой планшет из предложенных там в списке, с диагональю не меньше 7 дюймов
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,238
21.06.2016, 19:30     Разная разметка для разных разрешений #9
А по какой формуле это все считать. Ну например как расчитать диагональ зная длину ширину и плотность устройства? Как они связаны между собой?
Pablito
2403 / 1848 / 579
Регистрация: 12.05.2014
Сообщений: 6,577
Завершенные тесты: 1
21.06.2016, 19:39     Разная разметка для разных разрешений #10
по теореме пифагора
что тут непонятного?
есть размеры экрана в ПИКСЕЛЯХ и плотность, допустим 768*1280 и 320dpi

если размеры экрана в точках это катеты треугольника, то диагональ - это гипотенуза

sqrt(768*768 + 1280*1280) = sqrt(589824 + 1638400) = sqrt(2228224) = 1492 точки
перевожу, что я тут высчитал - если у девайса размеры экрана в ПИКСЕЛЯХ равны 768 на 1280 то его диагональ в тех же пикселях равна примерно 1492 точки

теперь зная диагональ и плотность точек на дюйм легко высчитать размер диагонали в дюймах
1492 / 320 = 4.6625 дюйма

на накоторых устройствах плотность точек по вертикали и горизонтали может отличаться, но зная обе плотности так же легко вычислить диагональ
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,238
22.06.2016, 00:46     Разная разметка для разных разрешений #11
то есть при плотности 320 точек на дюйм этот экран имеет 1280 / 2 = 640dp (ДЭПЕ, не точек) ширину, если был создан как планшет а не телефон
1280 точек здесь это вообще то высота(длина а не ширина) и почему так высчитывается 1280 / 2 можете обьяснить? Ну дюйм это примерно 2 см, но здесь 1280 - это пиксели, ну а получается размер вообще в dp. Можете пояснить этот расчет?

Добавлено через 4 часа 35 минут
А такой еще вопрос 1dp при разрешении 768 на 1280 и плотностью 320 dp это 2 пикселя верно? Поэтому 1280 / 2 = 640dp(ширина из пикселей переводится в dp) да? 768 здесь все таки длина или ширина? Можете обьснить этот момент?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 10:31     Разная разметка для разных разрешений
Еще ссылки по теме:
Исчезновение разрешений с манифеста Android
Android Запрос разрешений при старте приложения
Android Убрать постоянный запрос разрешений при попытке позвонить
Разметка Android
Разметка activity Android

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

Или воспользуйтесь поиском по форуму:
Pablito
2403 / 1848 / 579
Регистрация: 12.05.2014
Сообщений: 6,577
Завершенные тесты: 1
22.06.2016, 10:31     Разная разметка для разных разрешений #12
Цитата Сообщение от yura91 Посмотреть сообщение
1280 точек здесь это вообще то высота(длина а не ширина)
я не телепат что там за устройство было создано, но все равно это не принципиально
Цитата Сообщение от yura91 Посмотреть сообщение
и почему так высчитывается 1280 / 2
потому что экран имеет плотность 320 точек на дюйм, то есть двойная плотность относительно базовой (160dp)
лю этом тоже написано в той ссылке что я давал
поэтому делим на два
Цитата Сообщение от yura91 Посмотреть сообщение
А такой еще вопрос 1dp при разрешении 768 на 1280 и плотностью 320 dp это 2 пикселя верно?
да, без разницы какое разрешение экрана, и об этом тое написано в той ссылке
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities
Цитата Сообщение от yura91 Посмотреть сообщение
Поэтому 1280 / 2 = 640dp(ширина из пикселей переводится в dp) да? 768 здесь все таки длина или ширина? Можете обьснить этот момент?
если созданное устройство - телефон то ширина 768 в данном случае, а если планшет то по идее ширина 1280
Yandex
Объявления
22.06.2016, 10:31     Разная разметка для разных разрешений
Ответ Создать тему
Опции темы

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