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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.89
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

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

17.07.2013, 13:32. Просмотров 8419. Ответов 12
Метки нет (Все метки)

Здравствуйте. Мне интересно знать, как динамически создавать элементы интерфейса.

Например, в цикле вызывается метод, который создает TextView, в него вставляет текст:
Java
1
2
3
4
5
LinearLayout layout = (LinearLayout) findViewById(R.id.L1);
         
         TextView txt = new TextView(this); 
         txt.setText(text); 
         layout.addView(txt);
А например, мне нужно задать крупный шрифт этому TextView, покрасить его, потом динамически создать LinearLayout задав ему отступы и толщину\цвета границ и в этот LinearLayout вставить уже созданный и отформатированный TextView, а потом уже все это поместить в главный layout.

Можете показать как это делать на моем примере, либо есть ли статьи где описаны такие действия с примерами (желат. на русском)
Очень благодарен за внимание
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
17.07.2013, 13:58     Динамическое создание элементов интерфейса #2
На самом деле здесь всё просто: для установки в TextView цветов/размеров есть методы
Java
1
2
3
TextView.setTextColor(color);
TextView.setBackgroundColor(color);
TextView.setTextSize(size);
для отступов используются LayoutParams, в которых это всё и настраивается с помощью параметров

Java
1
2
LinearLayout.setPadding(left, top, right, bottom);
LinearLayout.LayoutParams.setMargins(left, top, right, bottom);
Полнее, чем описано в документации сложно где найти..
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
17.07.2013, 14:01  [ТС]     Динамическое создание элементов интерфейса #3
Цитата Сообщение от Wenceslaus Посмотреть сообщение
На самом деле здесь всё просто
А например, как теперь в этот LinearLayout вставить TextView, а потом все это вставить в основной LinearLayout либо ScrollView??
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
17.07.2013, 14:15     Динамическое создание элементов интерфейса #4
ScrollView должен содержать один и только один элемент (например LinearLayout), в него и вставляйте.
Так разве не работает?
Java
1
2
3
4
TextView text = new TextView(this);
LinearLayout lLayout = new LinearLayout(this);
lLayout.addView(text);
parentLinearLayout.addView(lLayout);
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
17.07.2013, 14:27  [ТС]     Динамическое создание элементов интерфейса #5
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Так разве не работает?
Блин сделал так, но криво получилось:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
         LinearLayout layout = (LinearLayout) findViewById(R.id.lin1);
         
         TextView txt = new TextView(this); 
         txt.setText(name); 
         LinearLayout  newLayout = new LinearLayout(this);
         newLayout.addView(txt,0);
         
         
         ImageView image = new ImageView(this);
         LinearLayout imageLayout = new LinearLayout(this);
         imageLayout.addView(image);
         
         newLayout.addView(imageLayout,1);
         layout.addView(newLayout);
Нужно что бы все ровно было и текст был перед картинкой а не после
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
17.07.2013, 14:53     Динамическое создание элементов интерфейса #6
Для ровности используйте настройки LayoutParams (height = width = LayoutParams.MATCH_PARENT и параметр weight) для каждого виджета, а также Gravity (вероятно Gravity.CENTER).
Но вот почему текст после картинки мне не понятно, с индексами месторасположения всё правильно..
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
17.07.2013, 14:56  [ТС]     Динамическое создание элементов интерфейса #7
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Для ровности используйте настройки LayoutParams (height = width = LayoutParams.MATCH_PARENT и параметр weight) для каждого виджета, а также Gravity (вероятно Gravity.CENTER).
Но вот почему текст после картинки мне не понятно, с индексами месторасположения всё правильно..
Вот сейчас так переделал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
         LinearLayout layout = (LinearLayout) findViewById(R.id.mainLinear);
         
         LinearLayout imageLayout = new LinearLayout(this);
         
         TextView txt = new TextView(this); 
         txt.setText(name); 
         
         ImageView image = new ImageView(this);
         imageLayout.addView(image);
         
         layout.addView(txt);
         layout.addView(imageLayout);
убрал индексы у addView(), т.к. картинки снизу начинают грузиться - это плохо..
Но, как мне тут сейчас сделать чтоы сначала текст а потом картинка шло, такой вот сам XML:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent">
 
   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/mainLinear">
 
 
        
   </LinearLayout>
 
</ScrollView>
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
17.07.2013, 17:03     Динамическое создание элементов интерфейса #8
Цитата Сообщение от Sanu0074 Посмотреть сообщение
сначала текст а потом картинка шло
Скопировал код к себе, запустил: первая строка - текст, вторая - картинка. Всё как положено. Покажите скрин приложения, ибо не понятно, как вы определяете, что картинка выше текста (image пустой в данном случае).
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
17.07.2013, 17:07  [ТС]     Динамическое создание элементов интерфейса #9
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Покажите скрин приложения, ибо не понятно, как вы определяете, что картинка выше текста (image пустой в данном случае).
Вот приложение, скопируйте себе и потеcтите, поймете тогда, файл прилепил
Вложения
Тип файла: rar test.rar (2.85 Мб, 54 просмотров)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.07.2013, 21:43     Динамическое создание элементов интерфейса #10
используйте LayoutInflater
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
17.07.2013, 22:23     Динамическое создание элементов интерфейса #11
Замените
Java
1
publishProgress(imageLnk, name);
на
Java
1
2
3
4
tagName = "";
if ("item".equals(xmlData.getName())) {
        publishProgress(imageLnk, name);
}
Иначе выходит, что добавляете пустые виджеты на layout'е, которые мешают корректному отображению.
goniometr
1 / 1 / 0
Регистрация: 28.05.2014
Сообщений: 50
10.06.2014, 23:38     Динамическое создание элементов интерфейса #12
Sanu0074, у тебя получилось динамически создавать элементы? можешь кинуть готовый вариант программулины своей где это реализовал.. или может в инете ещё где находил подробное описание подобного процесса то сейчас таже проблема а разобраться самостоятельно не получатся... Заранее спасибо за ответ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 00:21     Динамическое создание элементов интерфейса
Еще ссылки по теме:

Динамическое создание элементов на другом activity Android
Динамическое создание элементов интерфейса Android
Динамическое создание интерфейса Android
Android Создание интерфейса на основе макета Photoshop
Android Динамическое создание элементов на активити

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

Или воспользуйтесь поиском по форуму:
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
11.06.2014, 00:21  [ТС]     Динамическое создание элементов интерфейса #13
goniometr, используй layotinflater для сложных видов, или же простыми способами - TextView tw = new TextView()
Yandex
Объявления
11.06.2014, 00:21     Динамическое создание элементов интерфейса
Ответ Создать тему
Опции темы

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