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

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

Войти
Регистрация
Восстановить пароль
 
Mcr
10 / 10 / 0
Регистрация: 30.01.2012
Сообщений: 364
#1

TextView друг под другом программно - Программирование Android

20.05.2016, 07:03. Просмотров 460. Ответов 10
Метки нет (Все метки)

Добрый день!
Появилась проблемка с динамическим расположением элементов TextView,
проблема в том что на 0-ой элемент налаживается 1-ый, а остальные уже идут друг под другом как надо, мне кажется я какие-то не те параметры задаю нулевому элементу.
Ребята, объясните что не так, пожалуйста.
Вот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 for(int i=0; i<alias.teams.size();i++){
 
            TextView text_view = new TextView(this);
            String teamName = alias.teams.get(i).getName();
 
            text_view.setText(teamName);
            text_view.setId(i);
 
            linearParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
 
            if(i==0){
                linearParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
            }else{
                linearParams.addRule(RelativeLayout.BELOW, text_view.getId()-1);
            }
 
           text_view.setLayoutParams(linearParams);
            lLayout.addView(text_view);
}
Вот так это выглядит на экране(смотрите изображение)
Кто нибудь разъясните что я делаю не так.
0
Миниатюры
TextView друг под другом программно  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2016, 07:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос TextView друг под другом программно (Программирование Android):

TextView расположение друг под другом - Программирование Android
доброго времени суток господа. текст выводится друг за другом в строчку. а как реализовать что бы каждый новый набранный и сохраненный...

Как избежать наложения друг на друга textview - Программирование Android
Есть такой layout &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...

Как программно изменить textview? - Программирование Android
Мне нужно изменить TextView на многострочный текст, используя переменную. . Пример ниже. String gtext = &quot;elements/123.txt&quot;; try...

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

Как программно поменять альфу у TextView? - Программирование Android
Приветствую вас, Форумчане! Не подскажите ли, как программно поменять параметр Alpha у TextView? Надо поменять альфу на 0.3. Спасибо!

В БД программно добавлять строки из нескольких TextView - Программирование Android
Сделал Базу Данных, сохраняет и удаляет данные нормально, но нормально вывести на экран данные не получается. Т.е. я написал в ЭдитТекстах...

10
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
20.05.2016, 10:29 #2
Сделайте LinearLayout и вложите в ваш RelativeLayout
0
Mcr
10 / 10 / 0
Регистрация: 30.01.2012
Сообщений: 364
20.05.2016, 13:35  [ТС] #3
Цитата Сообщение от ExFau$t Посмотреть сообщение
Сделайте LinearLayout и вложите в ваш RelativeLayout
Не понял, для каждого елемента нужно LinearLayout? А если я еще хочу напротив надписи выводить(справа) еще TextView
типа такого вида:
|TextView | TextView|
|TextView | TextView|
|TextView | TextView|
Что посоветуете?
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
20.05.2016, 13:49 #4
Упс, в ответе ошибся с темой. Извини, топикстартер
0
Mcr
10 / 10 / 0
Регистрация: 30.01.2012
Сообщений: 364
20.05.2016, 13:51  [ТС] #5
Цитата Сообщение от Alexvp Посмотреть сообщение
Упс, в ответе ошибся с темой. Извини, топикстартер
Ну так может тут чем поможешь
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
20.05.2016, 14:40 #6
во-первых определить - друг под другом или по два в ряд, а то кто-то напишет решение, а потом "ой, а мне надо вообще не так, а зеленым прозрачным цветом"

во-вторых в коде выше неправильно назначаются id элементам, нельзя просто так взять и сделать id-1
то есть переменная уменьшится на единицу, но так не делается
динамически создавать и назначать id можно примерно так
Java
1
textView.setId(View.generateViewId());
в-третьих, если таких textview будет много то не проще ли сделать это списком?
RecyclerView или ListView если не осилил ресайклеры

что, ты спрашиваешь как пользоваться RecyclerView?
тем на форуме и в интернете полно
0
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
20.05.2016, 16:00 #7
Цитата Сообщение от Mcr Посмотреть сообщение
Не понял, для каждого елемента нужно LinearLayout? А если я еще хочу напротив надписи выводить(справа) еще TextView
типа такого вида:
|TextView | TextView|
|TextView | TextView|
|TextView | TextView|
Что посоветуете?
Создаётся линеар и вкладывается туда нужная вью, если нужно в две колонки - самое простое вложить в линеар вертикальный n линеаров горизонтальных, а в каждый горизонтальный два текствью, если нужно потом что-то с ними делать, лучше не setId, а setTag.

Добавлено через 2 минуты
Ещё можно всю эту байду нарисовать в разметке и потом что-то типо View view = LayoutInflater.from(context).inflate(R.layout.view, null);
0
Mcr
10 / 10 / 0
Регистрация: 30.01.2012
Сообщений: 364
20.05.2016, 16:21  [ТС] #8
Цитата Сообщение от Паблито Посмотреть сообщение
во-первых определить - друг под другом или по два в ряд, а то кто-то напишет решение, а потом "ой, а мне надо вообще не так, а зеленым прозрачным цветом"
По два в ряд.

Цитата Сообщение от Паблито Посмотреть сообщение
во-вторых в коде выше неправильно назначаются id элементам, нельзя просто так взять и сделать id-1
то есть переменная уменьшится на единицу, но так не делается
динамически создавать и назначать id можно примерно так
Это я возьму на заметку.


Цитата Сообщение от Паблито Посмотреть сообщение
в-третьих, если таких textview будет много то не проще ли сделать это списком?
RecyclerView или ListView если не осилил ресайклеры
что, ты спрашиваешь как пользоваться RecyclerView?
тем на форуме и в интернете полно
А тут меня не интересует список, потому что у меня будет максимум 10 рядов.

Ну так подскажите как это сделать...или это у меня c Id-шниками проблема?

Добавлено через 13 минут
Цитата Сообщение от ExFau$t Посмотреть сообщение
Создаётся линеар и вкладывается туда нужная вью, если нужно в две колонки - самое простое вложить в линеар вертикальный n линеаров горизонтальных, а в каждый горизонтальный два текствью, если нужно потом что-то с ними делать, лучше не setId, а setTag.
Спасибо попробую )
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
20.05.2016, 16:30 #9
добавлять по две это не проблема
важнее понимать как это должно выглядеть
эти две вьюшки будут делить экран по ширине поровну или будут лепиться одна к другой
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,864
Завершенные тесты: 1
20.05.2016, 18:15 #10
короче переделал немного код из другого своего примера
textview вставляются в две колонки и делят доступное по горизонтали место поровну
1. подключаем в build.gradle новый GridLayout который поддерживает веса
XML
1
    compile 'com.android.support:gridlayout-v7:23.4.0'
2. где-то в разметку вставляем сам GridLayout в который будут вставляться текствьюшки
XML
1
2
3
4
5
6
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:columnCount="2" />
3. и код в активити, который совершает магию
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final GridLayout gridLayout = (GridLayout) findViewById(R.id.container);
        for (int i = 1; i <= 10; i++) {
            TextView tv = new TextView(this);
            tv.setText("Группа " + i);
            final GridLayout.LayoutParams lp = new GridLayout.LayoutParams();
            lp.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f);
            gridLayout.addView(tv, lp);
        }
    }
4. PROFIT
TextView друг под другом программно
1
Mcr
10 / 10 / 0
Регистрация: 30.01.2012
Сообщений: 364
21.05.2016, 10:38  [ТС] #11
Цитата Сообщение от ExFau$t Посмотреть сообщение
Создаётся линеар и вкладывается туда нужная вью, если нужно в две колонки - самое простое вложить в линеар вертикальный n линеаров горизонтальных, а в каждый горизонтальный два текствью, если нужно потом что-то с ними делать, лучше не setId, а setTag.
Спасибо мне помог ваш ответ

Отчет о проделанной работе
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
for(int i=0; i<alias.teams.size();i++) {
            /*create textview*/
            TextView text_view = new TextView(this);
            TextView textViewRating = new TextView(this);
            /*get name and rating from class alias*/
            String teamName = alias.teams.get(i).getName();
            int teamRating = alias.teams.get(i).getRating();
 
            /*set text in textView and add to list*/
            text_view.setText(teamName);
            text_view.setTextSize(21f);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f);
            text_view.setLayoutParams(lp);
 
            textViewRating.setText(String.format("%1$d", teamRating));
            textViewRating.setTextSize(21f);
 
            /*Create linear layout*/
            linearLayout = new LinearLayout(this);
            linearLayout.setOrientation(LinearLayout.HORIZONTAL);
            /*set linear layout params */
            linearParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            linearLayout.setLayoutParams(linearParams);
 
            /*in created layout add created textviews*/
            linearLayout.addView(text_view);
            linearLayout.addView(textViewRating);
 
            /*and created layout added to current layout*/
            currentLinear.addView(linearLayout);
        }
0
Миниатюры
TextView друг под другом программно  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2016, 10:38
Привет! Вот еще темы с ответами:

Как программно изменить текст в TextView - Программирование Android
Как из MainNavigationActivity изменить текст в шапке меню? Там где текст @Android Studio@

Воспроизведение аудио друг за другом - Программирование Android
Дорогие форумчане, не могу воспроизвести музыку друг за дружком, проиграла первая, сразу началась другая, и так по кругу, как это сделать?...

Вывести 2 Toast сразу друг за другом - Программирование Android
Как показать 2, 3, 5, .... toast'ов подряд ? то есть есть например есть некая функция : void blabla(){ ...... ...

Как сделать что-бы при сдвиге WebView вверх,он залезал под TextView - Программирование Android
Помогите,мне надо что-бы при сдвиге WebView вверх,он залезал под TextView а не на него,это возможно сделать не меняя местами элементы? ...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
21.05.2016, 10:38
Ответ Создать тему
Опции темы

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