Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Оформление кнопки: отследить, вмещается ли текст в размеры кнопки

Добрый день, задача стоит следующая
динамически создаю кучу кнопок, каждой присваиваю setText из массива.
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
   for (int i=0;i<title.length;i++){
                button[i]=new Button(pc.vorgul.testnewsparser.MainActivity.this);
                button[i].setText(title[i]+"\n"+description[i]);
                button[i].setId(View.generateViewId());
                button[i].setOnClickListener(pc.vorgul.testnewsparser.MainActivity.this);
                lMain.addView(button[i],lMain.getWidth(),size.y/3);
            }
        }
как отследить, вмещается ли текст в размеры кнопки, и если не вмещается, то в конце ставить троеточие??
Ответ: есть там некоторое количество граблей, по которым надо будет сходить. разрешение экрана, размер шрифта, ширина полей...
решение в лоб - ограничивать длинну какой-то известной цифрой. а ее задать на основании размера и разрешения экрана.

я бы попробовал сделать по-другому.
создаем кнопку, кидаем в нее текст, заранее известного размера (100символов например), показываем, меряем, скрываем. после этого у нас есть некий замер, который можно использовать в качестве эталонного.
дальше наверно понятно.
Вопрос: автоматическое изменение размера шрифта

как можно реализовать автомасштабирование (изменение размера шрифта в ТекстВию) Текста в зависимости от размеров экрана? Мне просто нужно чтоб один и тот же текст более-менее нормально отображался на разных мониторах. Я дела Текствиюшку на весь экран(работал на средненьком экране) в итоге на одних устройствах текст тупо не влазит весь, на других- уходит в две небольшие строки вверху и куча пустого места
Ответ:

Не по теме:

я пытался написать собственный велосипед, что-то типа AutoSizeTextView
но там оказалось не все так просто - полезли нюансы и я забил
проще потратить 5 минут и найти на гитхабе готовую библиотеку (они там точно есть)

Вопрос: Задать размер кнопки пропорционально экрану

как задать размер кнопки пропорционально экрану, например, кнопка=1/2 экрана???
Ответ:
Сообщение от Tro0P
пропорционально экрану
вопрос был про экран)

den_droid, укажите в каком месте нужно писать ваш код
Вопрос: Изменение размера текста кнопки вместе с размером самой кнопки?

Есть 100500 кнопок, нужно имитировать их нажатие.

делаю это через селекторы и android:state_pressed

но, текст таким образом не меняется. Насколько я понял раньше была какая-то возможность менять его в селекторах через style, но сейчас нет. Пробовал повесить <scale> тоже не вышло.

Можно заменить кнопки на imagebutton и работать уже через картинки, но это совсем плохой вариант.

Менять через навешивание OnTouchListener тоже не подходит, т.к. кнопок слишком много и на каждую тогда надо вешать слушатель, а в нем switch для перехвата id кнопки.


Вообщем, есть какие-нибудь более простые и удобные способы заставить текст трансформироваться вместе со всей кнопкой?
Ответ: в onTouch нет смысла искать что-то Button vv=(Button) findViewById(v.getId());

первый параметр - это и есть кнопка, на которую нажали
Button b = (Button) v;
и дальше switch-case
b.setText()
Вопрос: Изменение размера W и H в layout

Добрый вечер!
Возник вот какой вопрос.
Создаём элементы:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="844px"
    android:layout_height="1061px"
    android:background="#77acff"
    tools:context=".MainActivity"
    android:id="@+id/rl"
>
 
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/img"
        android:background="#ff9b47"
        android:src="@drawable/n39" />
 
</RelativeLayout>
Исходный размер изображения - 844 х 1061 рх.
Проблема заключается в том, что не понятно как выставлять размер RelativeLayout (точнее изменять размеры), чтобы на любых экранах картинка смотрелась одинакового.
Дело вот в чём: сделали мы подгонку под xhdpi, где density = 2, отлично. т.е. 1688 х 2122 рх вышел у RelativeLayout, но как изменять для других экранов? (ldpi, mdpi, hdpi).
Просто для экономии места хотелось бы не делать 4хN картинок, потому что картинок будет очень много для каждого экрана.
Ответ: Мне чисто в целях экономии времени и ресурсов (можно сказать и памяти, ну да ладно).

Первому сообщению спасибо - сразу прям дошло что к чему. Вопрос даже вдруг оказался в том - как привязать разные пиксели к dp ?

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="844dp"
    android:layout_height="1061dp"
    android:background="#77acff"
    tools:context=".MainActivity"
    android:id="@+id/rl"
>
 
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/img"
        android:background="#ff9b47"
        android:src="@drawable/n39" />
 
</RelativeLayout>
Проблема была ещё вот в чём: я использую программный скрол, где есть типа размеры картинки и я думала. что нужно программно до setContentView изменить layout и дальше там как по маслу.
А вышло даже вот как:

После установки layout я измеряю density:

Java(TM) 2 Platform Standard Edition 5.0
1
final float appDensity = (float)(this.getApplicationContext().getResources().getDisplayMetrics().density);
А затем меняю размеры картинки для программного скролла:

Java(TM) 2 Platform Standard Edition 5.0
1
2
bitmapWidth = (int)(bitmapWidth * appDensity);
        bitmapHeight = (int)(bitmapHeight * appDensity);
Просто мне не совсем понятно, как 844px == 844dp для, например, xhdpi, где у них коэф density = 2.
Но применив все те манипуляции с разрешениями и измерениями всё работает как надо на всех устройствах.
Вопрос: Как подогнать ряд кнопок в TableLayout под ширину экрана?

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

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

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


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

Java(TM) 2 Platform Standard Edition 5.0
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));
        }
    }
Ответ:
Сообщение от 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(TM) 2 Platform Standard Edition 5.0
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);
            }
        });

в принципе и все
Вопрос: Поменять размер кнопки

Приветствую.
Есть кнопка:
XML
1
2
3
4
<Button
            android:id="@+id/topBtn"
            app:layout_marginLeftPercent="13%"
            app:layout_heightPercent="33.33%" />
Кнопка должна быть квадратной, а так как ширина и высота экрана разная и высота кнопки - это 33% от высоты лейаута, то ширину приходиться устанавливать динамично. Вот тут еще одна проблема, как это сделать ? Все способы из интернетов не помогли.

Пытаюсь поменять ширину в классе MainActivity в методе onCreate() и классе View в методе onLayout().
В первом случае
Java
1
Button topBtn = (Button) findViewById(R.id.topBtn);
возвращает эту кнопку, но метод .getHeight() возвращает null, а во-втором случае, и вовсе findViewById() возвращает null, не смотря на то, что при дебаге, сначала кнопка находится в активити, а потом не находится во вьюхе. Это как ?
Помогите, пожалуйста, пол дня потерял)
Ответ: Благодарю.
Вопрос: GridLayout размеры кнопок пропорционально весу

Здравствуйте, в GridLayout есть кнопки: как сделать чтобы все кнопки растягивались по горизонтали и вертикали родительского контейнера? Ведь у GridLayout нет свойства weight(вес)?
Ответ: Спасибо
Вопрос: Масштабирование картинок, отрисованных на кнопках

Здравствуйте. Есть кнопки с отрисовнными на них картинками
Код XML
1
android:drawableLeft="@drawable/icon_temp_btn_on_off"
, где drawable/icon_temp_btn_on_off
Код XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:drawable="@drawable/therometr_Pic_Black" 
     android:state_pressed="false"/>
 
     <item android:drawable="@drawable/therometr_Pic_White"
    android:state_pressed="true"/>
</selector>
естественно на разных диагоналях экранов они либо смотрятся маленькими либо не влезают в кнопку. Подскажите как сделать так, чтобы картинки эти масштабировались в зависимости от размеров дисплея. И возможно ли сделать так: загрузить одну, заведомо большую картинку, с хорошим разрешением и как то настроить так, чтобы она уменьшалась под размер кнопки, а не обрезалась краями кнопки?
Ответ: Была у меня такая мысль, но как тогда отслеживать "Click" по Layout-ам и менять цвет текста и картинок при касании? Так что остается только рожать множество картинок под разный dpi ?
Вопрос: Кнопка под разные размеры экранов

Ребята, если я ничего не путаю. то кто то в коментах на форуме написал, что есть
готовая библиотека, которая меряет экран пользователя, и, в зависимости от его размера, подгоняет нужных размеров кнопку?
Это так? Поделитесь ссылкой плиз.
Ответ:

Не по теме:

а почему просто dp не использовать в View?