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

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

Войти
Регистрация
Восстановить пароль
 
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
#1

Динамическое создание интерфейса - Android

18.02.2015, 14:20. Просмотров 884. Ответов 8
Метки нет (Все метки)

Здравствуйте уважаемые. Помогите справиться с задачей.
Хочу динамически создать несколько LinearLayout c TextView, ImageView и Button (как на картинке В верху TextView по центру ImageView ниже Button). И все это закинуть в HorizontalScrollView.
Как это правильно сделать ?
Есть что-то вроде этого:
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
hsv = (HorizontalScrollView)findViewById(R.id.horizontalScrollView);
        LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
                wrapContent, wrapContent);
        lParams.gravity = Gravity.CENTER;
        if (folder.exists()) {
            String[] files = folder.list();
 
            for (int i = 0; i < files.length; i++){
                ImageView iv = new ImageView(this);
                iv.setImageBitmap(BitmapFactory.decodeFile(path+"/"+files[i]));
 
                Button btn = new Button(this);
                btn.setText("Открыть");
 
                TextView tv = new TextView(this);
                tv.setText("Название");
 
                LinearLayout ll = new LinearLayout(this);
                ll.addView(btn);
                ll.addView(tv);
                ll.addView(iv, lParams);
 
                hsv.addView(ll, lParams);//тут падает
            }
Но при добавлении в HorizontalScrollView вылетает прога.
Миниатюры
Динамическое создание интерфейса  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
18.02.2015, 16:10  [ТС]     Динамическое создание интерфейса #2
Причина падения в том что нужно добавлять RelativeLayout а не LinearLayout . Но как сделать все красиво пока не понятно.

Добавлено через 1 час 34 минуты
Подскажите как задать программно такие свойства как:
layout_alignParentTop для TextView
layout_centerHorizontal для TextView
orientation - для RelativeLayout
?
FreakMurderer
-58 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 85
18.02.2015, 18:35     Динамическое создание интерфейса #3
http://stackoverflow.com/questions/7...nterhorizontal
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
18.02.2015, 19:27  [ТС]     Динамическое создание интерфейса #4
FreakMurderer, спасибо, а еще интересует очень вопрос о генерации id для view. Подскажите как это правильно делать ? Насколько я понял там должны быть только положительные числа. Но как именно сгенерировать уникальный id не понятно.
FreakMurderer
-58 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 85
18.02.2015, 19:40     Динамическое создание интерфейса #5
NEvOl,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ViewIdGenerator {
    private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
 
    @SuppressLint("NewApi")
    public static int generateViewId() {
 
        if (Build.VERSION.SDK_INT < 17) {
            for (;;) {
                final int result = sNextGeneratedId.get();
                // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
                int newValue = result + 1;
                if (newValue > 0x00FFFFFF)
                    newValue = 1; // Roll over to 1, not 0.
                if (sNextGeneratedId.compareAndSet(result, newValue)) {
                    return result;
                }
            }
        } else {
            return View.generateViewId();
        }
 
    }
}
Отсюда
http://wenda.baba.io/questions/7587/...conflicts.html
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
19.02.2015, 16:01  [ТС]     Динамическое создание интерфейса #6
Цитата Сообщение от FreakMurderer Посмотреть сообщение
View.
что это такое ?
FreakMurderer
-58 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 85
19.02.2015, 16:13     Динамическое создание интерфейса #7
Цитата Сообщение от NEvOl Посмотреть сообщение
что это такое ?
В каком смысле ?
View это - http://developer.android.com/referen...view/View.html
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
19.02.2015, 17:27  [ТС]     Динамическое создание интерфейса #8
вроде разобрался)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2015, 17:31     Динамическое создание интерфейса
Еще ссылки по теме:

Android Динамическое создание интерфейса
Android Динамическое создание динамических обьектов
Динамическое создание элементов со стилями Android
Динамическое создание элементов интерфейса Android
Android Создание интерфейса на основе макета Photoshop

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

Или воспользуйтесь поиском по форуму:
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 713
19.02.2015, 17:31  [ТС]     Динамическое создание интерфейса #9
сейчас проблема осталась такая, делаю сдвиг с лева для первого (0) элемента, но почему-то элементы не сдвигаются:
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
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.LayoutParams RLParams = new RelativeLayout.LayoutParams(RLFillParent, RLFillParent);
 
        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);
 
        if (folder.exists()) {
            String[] files = folder.list();
            relationsIdMarket = new ArrayList<RelationsIdMarket>(files.length);
            for (int i = 0; i < files.length; i++){
                RLParams.setMargins((i==0)? 100 : 0, 0, 0, 0);//тут ставлю для 0-го элемента отступ с лева на 100
                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);
                iv.setImageBitmap(BitmapFactory.decodeFile(path+"/"+files[i]));
 
                iv.setId(rim.idImageView);
 
                Button btn = new Button(this);
                btn.setText("Открыть");
                btn.setOnClickListener(this);
 
                btn.setId(rim.idButton);
 
                RelativeLayout rl = new RelativeLayout(this);
 
                rl.addView(tv, TVParams);
                rl.addView(iv, IVParams);
                rl.addView(btn, BParams);
                rl.setPadding(50, 0, 50, 0);
 
                market_ll.addView(rl, RLParams);
 
                relationsIdMarket.add(rim);
            }
        }
в итоге изображение такое:
Миниатюры
Динамическое создание интерфейса  
Yandex
Объявления
19.02.2015, 17:31     Динамическое создание интерфейса
Ответ Создать тему
Опции темы

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