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

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

Войти
Регистрация
Восстановить пароль
 
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
#1

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

16.09.2014, 13:09. Просмотров 1210. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не задаётся margin для корневого элемента программно (Программирование Android):

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

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

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

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

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

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

7
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
16.09.2014, 13:49 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
По-моему тут проблема в том, что это действительно корневой элемент, и у него нет никакого элемента, относительно которого нужно сделать отступ. Добавьте корневым элементом еще один LinearLayout сделайте его math_parent и уже в него добавляйте остальное.
1
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
16.09.2014, 14:02 #4
Паблито, дак тож padding, это не margin)
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
16.09.2014, 15:17 #7
Цитата Сообщение от Паблито Посмотреть сообщение
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
Дак корневой-то так и останется на своем месте, только все его дочерние элементы будут иметь отступ. По крайней мере когда задаешь это в xml - оно срабатывает именно так.

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

Не по теме:

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

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

Как программно изменить Style для элемента ComboBox? - Visual Basic
Для элемента ComboBox нужно изменить Style (style=0 или 1) выбором из элемента ListBox. Помогите, не могу сообразить, как исправить...

Привязать обработчик события для программно добавленного элемента управления - C#
Такая проблема. Программно создаю DataGridView при добавлении новой вкладки на tabControl. Существует функция обработки события получения...

Margin-top и margin-bottom в ie6 не работает - HTML, CSS
#news1 &gt; p { margin-top:15px; margin-bottom:15px; } пробовал ставить !important эффект один и тот же...(

Не получается отступ margin следующего блочного элемента после двух дивов в строчку - HTML, CSS
Такая проблема: Два дива стоят рядом в строчку, оба высотой 410px, но почему-то следующий див не отсчитывает margin от этих двух, а...


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

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

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