Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
#1

Разная разметка для разных разрешений

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

Как сделать так, чтобы для экрана с разрешением 400х800 был свой layout файл, а для разрешения 1920х1080 свой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2014, 20:09
Ответы с готовыми решениями:

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

Разная задержка rstp-потока на разных устройствах
Есть приложение для воспроизведения потока rstp с ip камеры. На Xiaomi Redmi 3S...

Вызвать страницу разрешений для приложения в Android 6
как сделать при проверке включено ли разрешение или нет вызвать саму страницу...

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

Разметка для RadioGroup
Делаю карточку вопрос-варианты ответа. Выглядит сейчас она так, как на...

11
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
15.09.2014, 22:11 #2
Указывать размеры (в dimens.xml) в папках values-hdpi, values-ldpi и т.д. Изображения разного размера в папках drawable.
Или вопрос в другом?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
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 мы просто задаем размеры которые система будет подставлять для соответствующей конфигурации экрана так?
0
Pablito
2713 / 2159 / 732
Регистрация: 12.05.2014
Сообщений: 7,532
Завершенные тесты: 1
21.06.2016, 11:24 #4
Цитата Сообщение от yura91 Посмотреть сообщение
У меня есть несколько вопросов: Во первых что означает префикс sw
https://developer.android.com/guide/practices/screens_support.html
потрудись прочитать это внимательно, там есть ответы на все вопросы
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
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 толку никакого нет). Почему такое происходит?
0
Pablito
2713 / 2159 / 732
Регистрация: 12.05.2014
Сообщений: 7,532
Завершенные тесты: 1
21.06.2016, 18:31 #6
Цитата Сообщение от yura91 Посмотреть сообщение
Почему такое происходит?
я бы написал почему, но мне влепят предупреждение
перечитай еще пару раз ссылку
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
21.06.2016, 19:00 #7
Извините я просто плохо знаю английский и не все слова сразу могу уловить. Хорошо перечитаю.
0
Pablito
2713 / 2159 / 732
Регистрация: 12.05.2014
Сообщений: 7,532
Завершенные тесты: 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 дюймов
1
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
21.06.2016, 19:30 #9
А по какой формуле это все считать. Ну например как расчитать диагональ зная длину ширину и плотность устройства? Как они связаны между собой?
0
Pablito
2713 / 2159 / 732
Регистрация: 12.05.2014
Сообщений: 7,532
Завершенные тесты: 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 дюйма

на накоторых устройствах плотность точек по вертикали и горизонтали может отличаться, но зная обе плотности так же легко вычислить диагональ
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
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 здесь все таки длина или ширина? Можете обьснить этот момент?
0
Pablito
2713 / 2159 / 732
Регистрация: 12.05.2014
Сообщений: 7,532
Завершенные тесты: 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
1
22.06.2016, 10:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 10:31

Разметка для размера hdpi в ландшафтной ориентации
Всем привет! Кто знает как создать разметку для ландшафтной ориентации на hdpi...

JSOUP POST. В ответ вместо JSon приходит разметка страницы с полями для ввода данных
Делаю пост запрос к апи сайта. Назад должен получить json, однако получаю...

Исчезновение разрешений с манифеста
Здравствуйте! У меня такая проблема: При компиляции приложения, которое не...


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

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

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