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

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

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

Как подогнать ряд кнопок в TableLayout под ширину экрана? - Программирование Android

21.01.2016, 03:13. Просмотров 298. Ответов 1
Метки нет (Все метки)

День добрый. Пишу игру простенькую Крестики-нолики.
Поле состоит квадрата 3x3 из Кнопок, которые генерируются в коде.

Размер кнопки устанавливается при создании.
Java
1
2
button.setWidth(100);
button.setHeight(100);
Но на разных телефонах кнопки естественно по разному (где-то маленькие кнопки, а где-то не влазят целиком в экран), т.к. метод setWidth задает все в пикселях.

Вопрос, как можно сделать, чтобы ряд кнопок влезал на всех экранах?


Вот код создания кнопок:

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
42
    //динамически добавляет строки и колонки в игровое поле
    private void buildGameField() {
        Square[][] field = game.getField();
        for (int i = 0, lenI = field.length; i < lenI; i++) {
            final int x=i;
            TableRow row = new TableRow(this);      //создание строки таблицы
            for (int j = 0, lenJ = field[i].length; j < lenJ; j++) {
                final int y = j;
                Button button = new Button(this);
                buttons[i][j] = button;
 
                // установка слушателя, реагирующего на клик по кнопке
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Button button = (Button) v;
                        Game g = game;
                        Player player = g.getCurrentActivePLayer();
                        if (makeTurn(x, y)) {
                            button.setText(player.getName());
                        }
                        Player winner = g.checkWinner();
                        if (winner != null) {
                            gameOver(winner);
                        }
                        //если поле заполнено
                        if (g.isFieldFilled()) {
                            gameOver();
                        }
                    }
                });
 
                //добавление кнопки в таблицу
                row.addView(button, new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
 
                button.setWidth(100);
                button.setHeight(100);
            }
            //добавление строки в таблицу
            layout.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT));
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2016, 03:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как подогнать ряд кнопок в TableLayout под ширину экрана? (Программирование Android):

Подогнать размеры под экран - Программирование Android
подскажите почему в eclipse он показывает что все нормально видно а когда на смарт закидываю не видно кнопки cancel &lt;?xml version=&quot;1.0&quot;...

Подогнать размер текста под прямоугольник - Программирование Android
Рисую и печатаю текст на канве. Имеется прямоугольник с заданными размерами в пикселях (например, 150 на 80). И есть строка с текстом. ...

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

Как сделать так, чтобы мобильное приложение автоматически подстраивалось под размер экрана? - Программирование Android
В Android Studio мы же под определенную диагональ создаём приложение (один эмулятор).. Как при разработке сделать так, чтобы мобильное...

Как создать квадратный TableLayout содержащий 100 ImageView? - Программирование Android
Здравствуйте уважаемые Специалисты! Уже 2 недели ищу в интернете информацию и ничего нет. У меня такой вопрос: есть 100...

TableLayout как отловить значение строки по нажатию (для Андроид на java) - Программирование Android
Я только начинающий, прошу помочь по возможность, уже 2 день ищу информацию так и не понял как реализовать. Необходимо по нажатию на...

1
Pablito
2506 / 1990 / 620
Регистрация: 12.05.2014
Сообщений: 6,953
Завершенные тесты: 1
21.01.2016, 13:20 #2
Цитата Сообщение от egorikftp Посмотреть сообщение
Вопрос, как можно сделать, чтобы ряд кнопок влезал на всех экранах?
делать все в xml

Добавлено через 1 час 21 минуту
вот набросал, может пригодится
1. открываем файл style.xml и дописываем такие строки
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
    <style name="MyAwesomeStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_weight">1</item>
    </style>

со стилем кода будет куда меньше и менять потом что-то удобнее

2. создаем файл разметки, например field.xml с таким содержимым
Кликните здесь для просмотра всего текста
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <LinearLayout
        android:id="@+id/field"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:orientation="vertical">
 
        <LinearLayout
            style="@style/MyAwesomeStyle"
            android:orientation="horizontal">
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="1" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="2" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="3" />
        </LinearLayout>
 
        <LinearLayout
            style="@style/MyAwesomeStyle"
            android:orientation="horizontal">
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="4" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="5" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="6" />
        </LinearLayout>
 
        <LinearLayout
            style="@style/MyAwesomeStyle"
            android:orientation="horizontal">
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="7" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="8" />
 
            <Button
                style="@style/MyAwesomeStyle"
                android:text="9" />
        </LinearLayout>
    </LinearLayout>
 
</FrameLayout>

Это просто пример разметки, 9 кнопок которые будут квадратиком в центре экрана. При повороте размер будет пересчитываться.

3. в onCreate() добавляем немного кода
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
        findViewById(R.id.field).addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                View parentView = (View) v.getParent();
                int size = Math.min(parentView.getMeasuredWidth(), parentView.getMeasuredHeight());
                ViewGroup.LayoutParams params = v.getLayoutParams();
                params.width = size;
                params.height = size;
                v.setLayoutParams(params);
            }
        });

в принципе и все
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2016, 13:20
Привет! Вот еще темы с ответами:

Как подогнать ширину столбца комбобокса под текст - VBA
Здравствуйте. Помню, что такие темы периодически обсуждаются, но с ходу не получилось найти. Я предполагал использовать моноширинный...

DataGridView - как подогнать ширину таблицы под размер колонок - C#
Имеется таблица с десятком колонок. Ширина колонок автоматически подгоняется по содержимому. После заполнения есть вертикальная полоса...

Как подогнать форму под размер экрана - C#
Здравствуйте! Возникла проблема: у преподавателя низкое разрешение экрана и туда не помещается форма. Попробовал написать код для...

Подогнать ширину ячейки StringGrid под содержимое - C++ Builder
В одной ячейке таблицы должно аккуратно вмещаться несколько слов. У меня получается так, что текст вылазит за края. Как растянуть отдельно...


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

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

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