Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17

Динамическая кнопка с картинкой

14.02.2016, 12:47. Показов 2468. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, нужна помощь
Сделал свою кнопку, с картинками, вставляю программно, но никак нимогу задать размер
Помогите решить проблему, setLayoutParams не помогает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2016, 12:47
Ответы с готовыми решениями:

Кнопка BS_OWNERDRAW или кнопка со своей картинкой
Есть код, с помощью которого можно менять картинку при нажатии, при фокусе { // ownerdraw button static HBITMAP no_active; ...

Кнопка с картинкой
<a href='?dir=folder1' class='button'><img class='bico' src='images/add-folder.png'/>Открыть</a> .button { ...

Кнопка с картинкой
Этот вопрос не раз подымался, но полазив в разделе так и не разобрался, ибо чайник. Прошу помощи, нужно прицепить картинки к кнопкам, по...

7
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.02.2016, 16:25
код где?
0
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
14.02.2016, 19:07  [ТС]
лайаут кнопки


XML
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Button01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="30px"
    android:layout_gravity="center|center_horizontal"
    android:text="Своя кнопка"
    android:textColor="#fff"
    android:background="@drawable/myb_states"
    android:gravity="center"/>
состояние кнопки в событиях

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:drawable="@drawable/my_inactive" />
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:drawable="@drawable/my_active" />
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:drawable="@drawable/my_active" />
    <item android:state_enabled="false"
          android:drawable="@drawable/re"/>
    <item android:drawable="@drawable/my_inactive" />
</selector>



основной код динамически добавляется кнопка

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 MainActivity extends Activity
{
    Button btn;
    LinearLayout lin;
    LinearLayout mainL;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mainL = (LinearLayout) findViewById(R.id.horLin);
        
        //lin=(LinearLayout) View.inflate(this,R.layout.btnlay,null);
        //btn = (Button) findViewById(R.id.Button01);
        btn=(Button) View.inflate(this,R.layout.btnlay,null);
        mainL.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                    btn.setEnabled(false);
                }
        });
        mainL.addView(btn);
    }
}
Добавлено через 1 минуту
Размер никак ниполучается задать((
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.02.2016, 11:37
почему бы эту кнопку сразу не разместить в главном лаяуте? прямо в xml
0
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 10:52  [ТС]
братан Я эту кнопку добавляю программно, за раз около сто кнопок, это для игры, Сапёр, поэтому не могу прямо в лаяут поставить, если варианты есть подскажи братан?

Добавлено через 15 часов 47 минут
Паблито, ну че поможешь братан?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
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
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 21:42  [ТС]
Получился у меня но внёс изменения
Миниатюры
Динамическая кнопка с картинкой  
0
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 21:44  [ТС]
GridLayout.spec() принимает только тип int, по этому задал размеры по высоте и ширине
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2016, 21:44
Помогаю со студенческими работами здесь

Кнопка с картинкой
Подскажите как сделать шаблон кнопки с картинкой, ничего рабочего не нашел Вот если что мой ResourceDictionary ...

Кнопка с картинкой на WinApi
Исходник программы, показывающей пример создания стандартной системной кнопки с картинкой. Поддерживаются темы оформления для отрисовки....

Кнопка с картинкой png
Всем привет. Подскажите, как в билдере можно прицепить к кнопке .png файл? Поиск не дал результатов, ибо исключает png из запроса, а...

Кнопка facebook рядом с картинкой
доброго времени суток :) хочу добавить кнопку factbook - вопрос как сделать так чтобы справа от поделиться в окне facebook была...

Стиль тоггл кнопка с текстом и картинкой
День добрый. Имеется в наличии следующий стиль: &lt;Style x:Key=&quot;Style_MainButtons&quot; TargetType=&quot;ToggleButton&quot;&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru