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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
#1

Программное создание GridLayout и добавление в него объектов - Программирование Android

05.04.2014, 12:26. Просмотров 4310. Ответов 7
Метки нет (Все метки)

Дисклеймер:
Всем доброго дня! Я - новичок в написании программ под Android. Имеется небольшой опыт С++/С#, но речь не об этом.

Я начал изучение базовых элементов интерфейса - View и layout'ов. Поставил перед собой следующую задачу (на решении которой собственно и застопорился).

1) Программно создать GridLayout указанных размеров (пусть 10х10)
2) Заполнить ячейки в шахматном порядке (например элементами RadioButton) Пример прикрепил снизу.

Для начала решил создать поле 10х10 в методе onCreate, там же задать размер, после чего заполнять его спамя кнопку.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridLayout FieldLayout = new GridLayout(this);
        FieldLayout.setColumnCount(10);
        FieldLayout.setRowCount(10);
        
    }
 
    // Заполняем
    public void Create(View v) {    
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
    }
 
}
Ругается на строку 16 - FieldLayout cannot be resolved.
Насколько я понял, за пределами метода onCreate мы нашего поля не видим.
Вопрос - как в этом случае правильно создать GridLayout?

Спасибо за ваши ответы! Всем добра!
0
Миниатюры
Программное создание GridLayout и добавление в него объектов  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 12:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программное создание GridLayout и добавление в него объектов (Программирование Android):

Программное наполнение GridLayout - Программирование Android
В цикле заполняю GridLayout картинками. По нажатию на картинку, GridLayout очищается и заполняется новым набором картинок. Очищаю...

Программное добавление View - Программирование Android
Доброго времени. Знаю что на эту тему много инфы, как на форуме так и на других ресурсах, но решения своей проблемы все же не нашел. суть...

Программное добавление элементов - Программирование Android
Уважаемы подскажите такую ситуацию, не могу немного понять...Как на Relative разметке программно добавлять элементы, чтобы их можно было...

Программное добавление View - Программирование Android
Не могу разобраться: нужно программно прилепить н-ное количество вьюх. Делаю так: Dialog dialog = new Dialog(pd.getContext()); ...

Программное добавление View - Программирование Android
Всем привет! У меня в роли setContentView выступает класс Draw2D, в котором я собираюсь рисовать кое-какую графику. Графика рисуется...

Программное добавление строкового ресурса - Программирование Android
Здравствуйте! Я храню данные для ListView в XML-файле строковых ресурсов: <string-array name="cat_names"> <item>Рыжик</item> ...

7
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
05.04.2014, 12:56 #2
Цитата Сообщение от Pesso711 Посмотреть сообщение
Насколько я понял, за пределами метода onCreate мы нашего поля не видим.
Именно так.
Цитата Сообщение от Pesso711 Посмотреть сообщение
Вопрос - как в этом случае правильно создать GridLayout?
Сделать эту переменную членом класса

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends Activity {
    GridLayout FieldLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        FieldLayout = new GridLayout(this);
        FieldLayout.setColumnCount(10);
        FieldLayout.setRowCount(10);
        
    }
 
    // Заполняем
    public void Create(View v) {    
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
    }
 
}
1
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 14:56  [ТС] #3
Да, действительно. Сам не догадался =(

Теперь проблема в следующем - созданные кнопки никак не отображаются на экране.

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
package com.example.field;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    GridLayout FieldLayout; 
    //LinearLayout Test; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        FieldLayout = new GridLayout(this);
        //Test = (LinearLayout) findViewById(R.id.Test);
        FieldLayout.setColumnCount(5);
        FieldLayout.setRowCount(5);
        
    }
 
    
    // Заполняем в шахматном порядке.
    public void Create(View v) {    
        
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
    }
 
}
Думаю, дело в том, что layout-то я создал, но на экран его не добавил. Все, что нашел по теме, это setContentView, но так мы зададим корневой элемент экрана, а у меня корневым элементом является LinearLayout, созданный руками в xml - файле.

Вопрос - как же вывести созданный программно GridLayout на экран, оставив LinearLayout корневым элементом?

Спасибо за ваши ответы =)
0
dan41k
]:->
98 / 92 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 15:10 #4
Задай LinearLayout'у Id, получи на него ссылку

Java
1
LinearLayout ll = (LinearLayout) findViewById(**id layout'a**);
и добавляй в него элементы

Java
1
ll.addView(view, index);
Добавлено через 20 секунд
в твоем случае - положи в него GridLayout
1
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 15:22  [ТС] #5
Спасибо, заработало! Теперь такая проблема - Когда спамлю кнопку, выполня этот метод:

Java
1
2
3
4
5
6
 public void Create(View v) {    
        
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
    }
...то происходит заполнение GridView. При создании мы задали ему размер 5х5. Но на выходе мы имеем вот это: (см. миниатюру)


Почему gridView продолжает заполняться, когда мы жмем на кнопку?
0
Миниатюры
Программное создание GridLayout и добавление в него объектов  
dan41k
]:->
98 / 92 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 15:33 #6
ну а вам какой нужен был эффект?
0
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 15:43  [ТС] #7
Я хотел заполнить поле 5 на 5. Дальнейшее заполнение стало несколько неожиданным. Подозреваю, что что-то где-то не указал.
0
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
09.04.2014, 12:19  [ТС] #8
Бог с ним, с переполнением. В ходе реализации возник следующий вопрос - как добавить кнопку в конкретную ячейку в Gridlayout'е? Как правильно добавить соответствующие атрибуты в
Java
1
FieldLayout.addView(btnNew);
?

Добавлено через 12 часов 56 минут
Разобрался. Попробовал заполнить по диагонали - получилось.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Заполняем по диагонали.
    public void Create(View v) {    
        //Кнопка будет создана в этой строке...
        Spec row = GridLayout.spec(rowIndex, 1); 
        //... и в этой колонке
        Spec column = GridLayout.spec(columnIndex, 1);
        // Создадим параметр, в который передадим 2 строчки выше.
        GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, column);
        //Создали кнопку
        RadioButton btnNew = new RadioButton(this);
        //добавили кнопку в GridLayout, применив к ней параметры gridLayoutParam (кнопка появится в ячейке row;column)
        FieldLayout.addView(btnNew,gridLayoutParam);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
        rowIndex++; columnIndex++;
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 12:19
Привет! Вот еще темы с ответами:

Программное добавление рамки Layout - Программирование Android
Добавляю рамку к Layout с помощью XML файла: <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke...

Программное добавление View элементов в Fragment - Программирование Android
Здравствуйте. Проблема такая: в приложении есть 2 вкладки. Переключение между ними реализуются через ViewPager и FragmentStatePagerAdapter....

Программное создание экрана - Программирование Android
Всем доброго дня! Коллеги. Так получилось что в программе приходится рисовать все экраны программно. Столкнулся со следующей проблемой:...

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


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
09.04.2014, 12:19
Ответ Создать тему
Опции темы

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