Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
NEvOl
19 / 18 / 1
Регистрация: 13.08.2012
Сообщений: 744
1

Задать программно leftMargin для RelativeLayout

22.02.2015, 09:25. Просмотров 1580. Ответов 5
Метки нет (Все метки)

Имеется заготовка view:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/market_layout"
    android:orientation="horizontal">
    <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/horizontalScrollView"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/market_linear_layout_in_hsv">
 
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>
В LinearLayout с id = market_linear_layout_in_hsv программно добавляются RelativeLayout (которые в себе содержат Button, TextView, ImageView).
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
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
//ищем LinearLayout с id = market_linear_layout_in_hsv
        market_ll = (LinearLayout)findViewById(R.id.market_linear_layout_in_hsv);
//создаем параметры отображения для TextView, ImageView, Button
        RelativeLayout.LayoutParams TVParams = new RelativeLayout.LayoutParams(RLwrapContent, RLwrapContent );
        RelativeLayout.LayoutParams IVParams = new RelativeLayout.LayoutParams(250, 400);
        RelativeLayout.LayoutParams BParams = new RelativeLayout.LayoutParams(RLwrapContent, RLwrapContent);
//устанавливаем параметры отображения для компонентов RelativeLayout
        TVParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
        TVParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
 
        IVParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
        IVParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
 
        BParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
        BParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
//создаем параметры отображения для наших RelativeLayout
        ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(RLMatchParent, RLMatchParent);
 
        if (folder.exists()) {
            String[] files = folder.list();
            relationsIdMarket = new ArrayList<RelationsIdMarket>(files.length);
            for (int i = 0; i < files.length; i++){
//для первого RelativeLayout нужно установить отступ с лева 100
                mlp.leftMargin = i==0?100:0;
//создание элементов и установка им свойсв
                RelationsIdMarket rim = new RelationsIdMarket();
 
                rim.idProduct = i;
                rim.idTextView = ViewIdGenerator.generateViewId();
                rim.idImageView = ViewIdGenerator.generateViewId();
                rim.idButton = ViewIdGenerator.generateViewId();
 
                TextView tv = new TextView(this);
                tv.setText("Название");
 
                tv.setId(rim.idTextView);
 
                ImageView iv = new ImageView(this);
                if(GeneralData.images.size() == i)
                    GeneralData.images.add(BitmapFactory.decodeFile(pathToImg+"/"+files[i]));
 
                iv.setImageBitmap(GeneralData.images.get(i));
 
                iv.setId(rim.idImageView);
                iv.setImageBitmap(rp.bmp);
 
                Button btn = new Button(this);
                btn.setText("Открыть");
                btn.setOnClickListener(this);
 
                btn.setId(rim.idButton);
//создаем наш RelativeLayout 
                RelativeLayout rl = new RelativeLayout(this);
//добавляем в него TextView ImageView Button с нужными параметрами
                rl.addView(tv, TVParams);
                rl.addView(iv, IVParams);
                rl.addView(btn, BParams);
                rl.setPadding(50, 0, 50, 0);
//добавляем наш RelativeLayout в LinearLayout
                market_ll.addView(rl, mlp);
 
                relationsIdMarket.add(rim);
            }
        }
но отступ у первого RelativeLayout не устанавливается,
пробовал так:
Java
1
2
3
4
//создаем свойства отображения для RelativeLayout  
RelativeLayout.LayoutParams RLParams = new RelativeLayout.LayoutParams(RLMatchParent, RLMatchParent);
//устанавливаем отступы
RLParams.setMargins(100, 0, 0,0);
Так тоже не работает, не могу понять в чем проблема ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2015, 09:25
Ответы с готовыми решениями:

Программно задать цвет фона для View
Возникла проблема с установкой фона для View. Получаю цвет через класс Color Код: ...

Программно задать сим карту для звонков
Как можно программно задать сим карту для звонков? Например у меня стоит &quot;Всегда спрашивать&quot;, а...

Задать ScrollView программно
Здраствуйте! Как сделать ScrollView с элементом LinearLayout программно? Делаю одно, не работает...

Задать программно свойства Fragment
Доброго времени суток, я новичок в этом деле, поетому хочу попросить у вас помощи, мне нужно...

TextView задать отступ программно
Программно создаю TextView . Присваиваю ему ряд значений textView.setGravity(Gravity.CENTER); ...

5
dtx1212
6 / 6 / 3
Регистрация: 08.12.2013
Сообщений: 26
22.02.2015, 15:36 2
Зачем вообще такие извращения? Просто задайте этот RelativeLayout со всеми элементами в xml и делайте его видимым когда нужно. Если же их нужно добавить несколько подряд используйте ListView.
1
NEvOl
19 / 18 / 1
Регистрация: 13.08.2012
Сообщений: 744
22.02.2015, 16:44  [ТС] 3
dtx1212, Задача такая: считывать из файла некоторую инфу, и уже на основе ее генерировать N-е количество элементов управления. Для этого лучше использовать LIstView ?

Добавлено через 9 минут
причем в каждом item'е должен содержаться TextView, ImageView, Button.

Добавлено через 14 секунд
А прокрутка должна быть горизонтальной
0
dtx1212
6 / 6 / 3
Регистрация: 08.12.2013
Сообщений: 26
22.02.2015, 17:31 4
NEvOl, ну да ListView, а для того чтобы имелась горизонтальная прокрутка можешь использовать к примеру эту его реализацию.
https://github.com/sephiroth74/HorizontalVariableListView
1
NEvOl
19 / 18 / 1
Регистрация: 13.08.2012
Сообщений: 744
22.02.2015, 18:14  [ТС] 5
dtx1212, я так понимаю из всего что там есть, меня интересует только gradle-wrapper.jar, а то я не смог запустить тот проект в Android Studio ?
0
dtx1212
6 / 6 / 3
Регистрация: 08.12.2013
Сообщений: 26
22.02.2015, 18:17 6
NEvOl, чтобы подключить библиотеку тебе просто нужно добавить в build.gradle
Java
1
compile 'it.sephiroth.android.library.horizontallistview:hlistview:1.2.2'
Скачивать оттуда ничего не нужно.
1
22.02.2015, 18:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2015, 18:17

Задать размер кнопки программно
Здравствуйте. Возник такой вопрос: В программе я использую несколько кнопок, размер которых...

Дизайн: как задать программно интерфейс приложения?
Здравствуйте. Расскажите мне пожалуйста как можно больше про дизайн приложений. Раньше я...

Как программно задать правильную совместимость для программы?
Переопределить режим масштабирования высокого разрешения программно. Есть варианты как? Подскажите.


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

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

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