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

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

Войти
Регистрация
Восстановить пароль
 
java_class
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
#1

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

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

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

Notification с картинкой - Программирование Android
Как рисовать во всем поле сообщения? В прямоугольнике в слайд-панели. Много раз подобное видел, но не нашел как подобное сделать... Можно...

Залить фон картинкой - Программирование Android
как залить фон не цветом, а картинкой <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

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

ImageView с большой картинкой - Программирование Android
<ImageView android:id="@+id/serview" android:layout_width="match_parent" ...

Кнопки с картинкой и поворот экрана - Программирование Android
Всем. Я второй день как начал разбираться с этим, голова кругом идет. Не могу нагуглить как идеологически правильно сделать так что...

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

7
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
14.02.2016, 16:25 #2
код где?
0
java_class
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
14.02.2016, 19:07  [ТС] #3
лайаут кнопки


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
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
15.02.2016, 11:37 #4
почему бы эту кнопку сразу не разместить в главном лаяуте? прямо в xml
0
java_class
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 10:52  [ТС] #5
братан Я эту кнопку добавляю программно, за раз около сто кнопок, это для игры, Сапёр, поэтому не могу прямо в лаяут поставить, если варианты есть подскажи братан?

Добавлено через 15 часов 47 минут
Паблито, ну че поможешь братан?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
16.02.2016, 16:04 #6
я начал делать пример и нашел новый для меня лаяут
вобщем я сделал небольшой примерчик, только просьба - сделать не бездумно, а прочитать внимательно и попытаться понять что там происходит
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
java_class
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 21:42  [ТС] #7
Получился у меня но внёс изменения
0
Миниатюры
Динамическая кнопка с картинкой  
java_class
0 / 1 / 0
Регистрация: 12.01.2016
Сообщений: 17
16.02.2016, 21:44  [ТС] #8
GridLayout.spec() принимает только тип int, по этому задал размеры по высоте и ширине
0
16.02.2016, 21:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 21:44
Привет! Вот еще темы с ответами:

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

Динамическая загрузка в ListView - Программирование Android
Добрый день ув. Программисты. 3й день в безуспешных поисках. Точнее поиски успешны, но как прикрутить к своему проекту.... не...

Динамическая смена интерфейса - Программирование Android
Короче пишу тут програмку файловый менеджер. С динамическим созданием и размещением интерфейса на экране проблем нет. Только вот получается...

Динамическая инициализация ImageView - Программирование Android
Привет, подскажите как реализовать инициализацию ImageView, когда их кол-во заранее не известно. На активности есть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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