Форум программистов, компьютерный форум CyberForum.ru

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

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

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

16.09.2014, 13:09. Просмотров 1073. Ответов 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. Т.е. такая проблема только в корневом элементе проявляется. Как можно решить?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
16.09.2014, 13:49     Не задаётся margin для корневого элемента программно #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
По-моему тут проблема в том, что это действительно корневой элемент, и у него нет никакого элемента, относительно которого нужно сделать отступ. Добавьте корневым элементом еще один LinearLayout сделайте его math_parent и уже в него добавляйте остальное.
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
16.09.2014, 14:01     Не задаётся margin для корневого элемента программно #3
Java
1
2
3
    LinearLayout rootLinLay = new LinearLayout(this);
        rootLinLay.setBackgroundColor(0xFFFF55EE);
        rootLinLay.setPadding(50, 0, 0, 0);
а так?
строку rootLayPar.leftMargin = 75; надо убрать за ненадобностью
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
16.09.2014, 14:02     Не задаётся margin для корневого элемента программно #4
Паблито, дак тож padding, это не margin)
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
16.09.2014, 14:11     Не задаётся margin для корневого элемента программно #5
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
16.09.2014, 15:07  [ТС]     Не задаётся margin для корневого элемента программно #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 разрешается и внешние отступы указывать. Хотя, возможно, что он преобразуется как раз в такой код.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
16.09.2014, 15:17     Не задаётся margin для корневого элемента программно #7
Цитата Сообщение от Паблито Посмотреть сообщение
И что? Он применяется не к параметрам дочернего элемента, а к самому root лаяуту.
Дак корневой-то так и останется на своем месте, только все его дочерние элементы будут иметь отступ. По крайней мере когда задаешь это в xml - оно срабатывает именно так.

Добавлено через 7 минут
Все дошло) вы это кастуете на саму активити, не на contentVeiw) Недоглядел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 15:22     Не задаётся margin для корневого элемента программно
Еще ссылки по теме:

Android проставлять ли padding и Margin и прочие атрибуты Android
Android Использование разных onTouch для двух Layout элемента
Программно задать сим карту для звонков Android
Программно задать цвет фона для View Android
Android Изменить свойства программно созданного элемента

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

Или воспользуйтесь поиском по форуму:
Паблито
16.09.2014, 15:22     Не задаётся margin для корневого элемента программно
  #8

Не по теме:

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

Yandex
Объявления
16.09.2014, 15:22     Не задаётся margin для корневого элемента программно
Ответ Создать тему
Опции темы

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