Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
1

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

16.09.2014, 13:09. Просмотров 1460. Ответов 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>
Как это выглядит:
Кликните здесь для просмотра всего текста
Не задаётся margin для корневого элемента программно

Как видно, корневой элемент 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);    
    }
}
Скриншот:
Кликните здесь для просмотра всего текста
Не задаётся margin для корневого элемента программно

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

Изменить свойства программно созданного элемента
Проблема. Есть карта на ней маркеры список имен маркеров можно получить...

Ошибка: Документ не содержит корневого элемента
Доброе время суток. Помогите разобраться с ошибкой. вот код private void...

Как программно изменить свойство margin у контрола?
НЕ могу разобраться как поменять свойство margin... В документации нашел...

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

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

7
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
16.09.2014, 13:49 2
Лучший ответ Сообщение было отмечено Paket236 как решение

Решение

По-моему тут проблема в том, что это действительно корневой элемент, и у него нет никакого элемента, относительно которого нужно сделать отступ. Добавьте корневым элементом еще один LinearLayout сделайте его math_parent и уже в него добавляйте остальное.
1
Pablito
2764 / 2196 / 743
Регистрация: 12.05.2014
Сообщений: 7,706
Завершенные тесты: 1
16.09.2014, 14:01 3
Java
1
2
3
    LinearLayout rootLinLay = new LinearLayout(this);
        rootLinLay.setBackgroundColor(0xFFFF55EE);
        rootLinLay.setPadding(50, 0, 0, 0);
а так?
строку rootLayPar.leftMargin = 75; надо убрать за ненадобностью
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
16.09.2014, 14:02 4
Паблито, дак тож padding, это не margin)
0
Pablito
2764 / 2196 / 743
Регистрация: 12.05.2014
Сообщений: 7,706
Завершенные тесты: 1
16.09.2014, 14:11 5
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
0
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
16.09.2014, 15:07  [ТС] 6
Цитата Сообщение от 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);    
    }
}

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

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

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

Не по теме:

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

0
16.09.2014, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 15:22
Привет! Вот еще темы с ответами:

Присвоить переменной margin элемента
Доброго всем времени суток) Не как не получается присвоить переменной margin...

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

Убрать margin у последнего элемента в строке
У меня есть N строк из товаров, и между товарами margin-right: 30. Как сделать...


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

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

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