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

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

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

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

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

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

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

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

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

Какой дизайн разрешения необходим для поддержки всех разрешений - Программирование Android
Необходимо разработать приложение, которые бы корректно отображалось на всех устройствах. Т.е. я имею ввиду дизайн приложения. Собственно...

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

Разметка для размера hdpi в ландшафтной ориентации - Программирование Android
Всем привет! Кто знает как создать разметку для ландшафтной ориентации на hdpi экране??? Я пробовал создать папку "layout-land-hdpi",...

11
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
15.09.2014, 22:11 #2
Указывать размеры (в dimens.xml) в папках values-hdpi, values-ldpi и т.д. Изображения разного размера в папках drawable.
Или вопрос в другом?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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,310
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
21.06.2016, 18:31 #6
Цитата Сообщение от yura91 Посмотреть сообщение
Почему такое происходит?
я бы написал почему, но мне влепят предупреждение
перечитай еще пару раз ссылку
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
21.06.2016, 19:00 #7
Извините я просто плохо знаю английский и не все слова сразу могу уловить. Хорошо перечитаю.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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,310
21.06.2016, 19:30 #9
А по какой формуле это все считать. Ну например как расчитать диагональ зная длину ширину и плотность устройства? Как они связаны между собой?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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,310
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

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

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

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

Убрать постоянный запрос разрешений при попытке позвонить - Программирование Android
При наборе номера через приложение запрашивает разрешение (permission) на звонок. Его запрашивает каждый раз при попытке позвонить. Как...


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

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

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