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

Динамическая кнопка с картинкой - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Почему не отрисовывается картинка? http://www.cyberforum.ru/android-dev/thread1661928.html
Написал класс, наследующий ViewSurface MainView. Написал метод onDraw, в котором поле заливается белым цветом, и вызывается метод draw спрайта. Создал класс с bitmap'ом для спрайтовой анимации....
Программирование Android WebView упорно отказывается выполнять JS Добрый день, форумчане! Наверное перейду сразу к проблеме. Есть код WebView mWebView; mWebView = (WebView)frag2.findViewById(R.id.webplat); ... http://www.cyberforum.ru/android-dev/thread1661870.html
Программирование Android Ошибка EndofMemory в Android
Иногда, при переходе на другую активность вылетает ошибка "EndofMemory". Приложение закрывается и в тот же момент открывается на той же активности. Какие могут быть варианты решения этой проблемы?...
The connection to adb is down and a severe error has occured. you must restart adb and eclipse Программирование Android
Впервый раз лабы запускала, как только сделала - все было нормально.. А теперь выбивает подобное сообщение: the connection to adb is down and a severe error has occured. you must restart adb and...
Программирование Android ViewPager (Tabbed activity) как добавить данные на сраницы? http://www.cyberforum.ru/android-dev/thread1661749.html
Среда андройд студио. "я создал" проект из коробки tabbed activity, автоматом создалось 2 xml, main отвечает за виджеты ,а второй за данные,поправьте меня,если не так что-то, на fragment _main я...
Программирование Android Видео в приложении Всем доброго времени суток. Намереваюсь создать приложение с видео контентом внутри, что бы можно было в любой момент его просматривать, без интернета. Разумно ли будет хранить видео внутри... подробнее

Показать сообщение отдельно
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
16.02.2016, 16:04
я начал делать пример и нашел новый для меня лаяут
вобщем я сделал небольшой примерчик, только просьба - сделать не бездумно, а прочитать внимательно и попытаться понять что там происходит
1. первое что надо сделать это подключить новый лаяут в файле build.gradle
XML
1
compile 'com.android.support:gridlayout-v7:23.1.1'
2. пеперь разметка активити, кажется что текста много, но на самом деле там главное на что надо смотреть - это GridLayout с id="field". Это типа поле для кнопок. Остальной обвес из лаяутов потом можно выкинуть, но в примере они нужны для показа кнопок типа Старт и текстовых полей.
Если надо будет делать свою разметку от можно просто скопировать GridLayout и все.
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Счет:" />
 
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="end"
            android:text="Время 00:00" />
 
    </LinearLayout>
 
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
 
        <android.support.v7.widget.GridLayout
            android:id="@+id/field"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </FrameLayout>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="START" />
 
</LinearLayout>

инфа для low-lvl троллей: да, я знаю что можно было сделать лаяуты по-другому и не обязательно делать все на linear, но вот мне так захотелось

3. активити
добавляем в импорты
Java
1
import android.support.v7.widget.GridLayout;
где-то в onCreate() мы находим наш лаяут с id ="field" и вызываем метод в котором происходит магия
Java
1
2
        GridLayout field = (GridLayout) findViewById(R.id.field);
        createButtons(10, 10, field);
и сам метод + слушатель, просто копируем куда-то в активити, можно почитать комментарии, но в алгоритм можно не вникать на начальном этапе
Кликните здесь для просмотра всего текста
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
    private void createButtons(final int columns, final int rows, final GridLayout field) {
        // post action надо, потому что дальше в коде наше поле делаем квадратным
        field.post(new Runnable() {
            @Override
            public void run() {
                ViewGroup.LayoutParams fieldParams = field.getLayoutParams(); // берем параметры поля (лаяута)
                int size = Math.min(field.getWidth(), field.getHeight()); // определяем меньшую сторону
                fieldParams.width = size; // делаем стороны одинаковыми, квадрат
                fieldParams.height = size;
                field.setLayoutParams(fieldParams); // применяем новые параметры
                field.setColumnCount(columns); // задаем полю количество столбцов
                field.setRowCount(rows); // и строк
                // цикл в котором создаются кнопки
                for (int r = 0; r < rows; r++) {
                    for (int c = 0; c < columns; c++) {
                        Button btn = new Button(field.getContext());
                        btn.setOnClickListener(listener); // вешаем слушателя 
                        btn.setTag(c + " " + r); // назначаем tag на вьюшку, пригодится когда надо будет определить позицию на поле 
                        btn.setTextSize(7); // это можно убрать
                        btn.setText("" + (c + 1) * (r + 1)); // проставляем цифры на кнопках, тоже потом в топку
                        GridLayout.LayoutParams lp = new GridLayout.LayoutParams(); // создаем параметры лаяута для кнопки
                        lp.width = 0; // так надо потому что ниже мы указываем вес кнопок = 1, они будут сами высчитывать размеры
                        lp.height = 0;
                        lp.columnSpec = GridLayout.spec(c, 1f); // вес и позиция кнопки по горизонтали
                        lp.rowSpec = GridLayout.spec(r, 1f); // и по вертикали
                        field.addView(btn, lp); // добавляем кнопку на поле 
                    }
                }
            }
        });
    }
 
    private final View.OnClickListener listener = new View.OnClickListener() { // слушатель для кнопок (с) кэп
        @Override
        public void onClick(View v) {
            String[] arr = v.getTag().toString().split(" ");
            int col = Integer.valueOf(arr[0]);
            int row = Integer.valueOf(arr[1]);
            Toast.makeText(getBaseContext(), "Button Pressed   col: " + col + " row: " + row, Toast.LENGTH_SHORT).show();
        }
    };

4. PTOFIT
и что получилось
Динамическая кнопка с картинкой

И потом, я бы заменил кнопки на ImageView или вообще на свои, кастомные вьюшки чтобы удобно менять картинки на них.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru