Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 86

Не задаётся margin для корневого элемента программно

16.09.2014, 13:09. Показов 3604. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день!
Ниже приведён пример XML-файла:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#FFFF55EE"
    android:layout_marginLeft="50dp"
    android:layout_width="200dp"
    android:layout_height="200dp" >
 
    <Button
        android:text="Button"
        android:layout_marginLeft="100dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 
</LinearLayout>
Как это выглядит:
Кликните здесь для просмотра всего текста

Как видно, корневой элемент LinearLayout имеет внешний отступ слева.
Пытаюсь сделать тоже самое программно:
Java
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
public class MainActivity extends Activity
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        // LinearLayout
        LinearLayout rootLinLay = new LinearLayout(this);
        rootLinLay.setBackgroundColor(0xFFFF55EE);
 
        LinearLayout.LayoutParams rootLayPar = new LinearLayout.LayoutParams(300, 300);
        rootLayPar.leftMargin = 75;
        
        setContentView(rootLinLay, rootLayPar);
        
        //---// Button
        LinearLayout.LayoutParams layPar = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layPar.leftMargin = 150;
        
        Button btn = new Button(this);
        btn.setText("Button");
        btn.setLayoutParams(layPar);
 
        rootLinLay.addView(btn);    
    }
}
Скриншот:
Кликните здесь для просмотра всего текста

Почему-то у корневого элемента LinearLayout отсутствует внешний отступ слева, хотя такой отступ есть у дочернего элемента Button. Т.е. такая проблема только в корневом элементе проявляется. Как можно решить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2014, 13:09
Ответы с готовыми решениями:

Ошибка: Документ не содержит корневого элемента
Доброе время суток. Помогите разобраться с ошибкой. вот код private void button1_Click(object sender, EventArgs e) { ...

Как программно изменить свойство margin у контрола?
НЕ могу разобраться как поменять свойство margin... В документации нашел такой вариант: Button.Margin = New Thickness(5, 0, 5, 0) ...

Проверка XML по XSD без учета имени корневого элемента
Доброго времени суток! Подскажите пожалуйста, можно ли как-то использовать проверку XML по схемам XSD, для XML одинаковой структуры,...

7
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
16.09.2014, 13:49
Лучший ответ Сообщение было отмечено Paket236 как решение

Решение

По-моему тут проблема в том, что это действительно корневой элемент, и у него нет никакого элемента, относительно которого нужно сделать отступ. Добавьте корневым элементом еще один LinearLayout сделайте его math_parent и уже в него добавляйте остальное.
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.09.2014, 14:01
Java
1
2
3
    LinearLayout rootLinLay = new LinearLayout(this);
        rootLinLay.setBackgroundColor(0xFFFF55EE);
        rootLinLay.setPadding(50, 0, 0, 0);
а так?
строку rootLayPar.leftMargin = 75; надо убрать за ненадобностью
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
16.09.2014, 14:02
Паблито, дак тож padding, это не margin)
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.09.2014, 14:11
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
0
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 86
16.09.2014, 15:07  [ТС]
Цитата Сообщение от Spelcrawler Посмотреть сообщение
По-моему тут проблема в том, что это действительно корневой элемент, и у него нет никакого элемента, относительно которого нужно сделать отступ. Добавьте корневым элементом еще один LinearLayout сделайте его math_parent и уже в него добавляйте остальное.
Во, вот это хорошая мысль! Теперь выглядит одинаково.
Код:
Кликните здесь для просмотра всего текста
Java
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
public class MainActivity extends Activity
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        // LinearLayout
        LinearLayout rootLinLay = new LinearLayout(this);
 
        ViewGroup.LayoutParams rootLayPar = new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        
        setContentView(rootLinLay, rootLayPar);
        
        //---// LinearLayout
        LinearLayout LinLay = new LinearLayout(this);
        LinLay.setBackgroundColor(0xFFFF55EE);
 
        LinearLayout.LayoutParams linLayPar = new LinearLayout.LayoutParams(300, 300);
        linLayPar.leftMargin = 75;
        
        LinLay.setLayoutParams(linLayPar);
        rootLinLay.addView(LinLay);
        
        //---//---// Button
        LinearLayout.LayoutParams layPar = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layPar.leftMargin = 150;
        
        Button btn = new Button(this);
        btn.setText("Button");
        
        btn.setLayoutParams(layPar);
        LinLay.addView(btn);    
    }
}

Скриншот:
Кликните здесь для просмотра всего текста

Видимо, для корневого элемента срабатывают только ViewGroup'овские LayoutParams, задающие размер. Странно, что в XML разрешается и внешние отступы указывать. Хотя, возможно, что он преобразуется как раз в такой код.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
16.09.2014, 15:17
Цитата Сообщение от Паблито Посмотреть сообщение
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
Дак корневой-то так и останется на своем месте, только все его дочерние элементы будут иметь отступ. По крайней мере когда задаешь это в xml - оно срабатывает именно так.

Добавлено через 7 минут
Все дошло) вы это кастуете на саму активити, не на contentVeiw) Недоглядел.
0
16.09.2014, 15:22

Не по теме:

я уже махнул рукой на эту ветку :)
ТСу удобнее наплодить лайяутов, ему так удобнее

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2014, 15:22
Помогаю со студенческими работами здесь

Проверка типа корневого элемента XML без учета его имени
Доброго времени суток! Уважаемые гуру программирования и высокие профессионалы! Помогите решить частную глупую проблемку! Есть файл...

Бинарное дерево (передать адрес первого (корневого) элемента дерева в метод)
Добрый день! Такой вопрос: Реализован шаблонный класс - бинарное дерево. Создан метод прохождения по элементам с помощью рекурсии. Не...

Хорошо ли в некоторых случаях хранить настройки в атрибутах корневого элемента xml файла
Добрый день! Пишу маленькое приложение в качестве тестового задания для приема на стажировку. Есть настройки подключения к БД(логин,...

Присвоить переменной margin элемента
Доброго всем времени суток) Не как не получается присвоить переменной margin элемента, делаю вот так: var mar =...

Влияние margin дочернего элемента на родительский
Думаю многие встречались с проблемой, есть блок и внутри него находится дочерний блок. При попытке подвинуть дочерний блок, с помощью...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru