Как настроить размер кнопок в соответствии с размером экрана в Android Studio
Я новичок в разработке Android, делаю калькулятор в студии Android. мой калькулятор отлично работает, но есть проблема с его компоновкой, я устанавливаю его на свой планшет, и кнопка была маленькой, поскольку я проектирую их в adroid studio на эмуляторе, размер кнопки не изменяется, поэтому вам нужна помощь, чтобы размер кнопки увеличивался с изменением размера экрана
Мой калькулятор в Android Studio
![enter image description here]()
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#ff000000">
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/clear"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="110dp"
android:background="@drawable/clear_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/plus_minus"
android:layout_alignBottom="@+id/clear"
android:layout_toRightOf="@+id/clear"
android:layout_toEndOf="@+id/clear"
android:layout_marginLeft="-11dp"
android:background="@drawable/pm_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/per"
android:layout_alignBottom="@+id/plus_minus"
android:layout_toRightOf="@+id/plus_minus"
android:layout_toEndOf="@+id/plus_minus"
android:layout_marginLeft="-11dp"
android:background="@drawable/per_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/div"
android:layout_alignTop="@+id/per"
android:layout_toRightOf="@+id/per"
android:layout_toEndOf="@+id/per"
android:layout_marginLeft="-11dp"
android:background="@drawable/div_btn"
android:layout_alignParentRight="false" />
<TextView
android:layout_width="fill_parent"
android:layout_height="70dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/disp"
android:layout_above="@+id/plus_minus"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textColor="@android:color/white"
android:textSize="32sp"
android:inputType="none"
android:textStyle="normal"
android:gravity="right" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/seven"
android:layout_below="@+id/clear"
android:layout_toLeftOf="@+id/plus_minus"
android:layout_toStartOf="@+id/plus_minus"
android:layout_marginTop="-10dp"
android:layout_alignParentTop="false"
android:layout_alignParentLeft="true"
android:background="@drawable/seven_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/eight"
android:layout_alignTop="@+id/seven"
android:layout_alignLeft="@+id/plus_minus"
android:layout_alignStart="@+id/plus_minus"
android:background="@drawable/eight_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/nine"
android:layout_alignBottom="@+id/seven"
android:layout_alignLeft="@+id/per"
android:layout_alignStart="@+id/per"
android:background="@drawable/nine_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/mul"
android:layout_alignTop="@+id/nine"
android:layout_alignLeft="@+id/div"
android:layout_alignStart="@+id/div"
android:background="@drawable/mul_btn" />
<Button
android:layout_width="103dp"
android:layout_height="90dp"
android:id="@+id/four"
android:layout_below="@+id/seven"
android:layout_alignRight="@+id/seven"
android:layout_alignEnd="@+id/seven"
android:layout_marginTop="-10dp"
android:layout_alignParentLeft="false"
android:background="@drawable/four_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/five"
android:layout_alignBottom="@+id/four"
android:layout_alignLeft="@+id/eight"
android:layout_alignStart="@+id/eight"
android:background="@drawable/five_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/six"
android:layout_alignTop="@+id/five"
android:layout_alignLeft="@+id/nine"
android:layout_alignStart="@+id/nine"
android:background="@drawable/six_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/sub"
android:layout_toEndOf="@+id/nine"
android:layout_alignTop="@+id/six"
android:layout_alignLeft="@+id/mul"
android:layout_alignStart="@+id/mul"
android:background="@drawable/min_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/one"
android:layout_below="@+id/four"
android:layout_alignLeft="@+id/four"
android:layout_alignStart="@+id/four"
android:layout_marginTop="-10dp"
android:layout_alignParentLeft="false"
android:background="@drawable/one_btn" />
<Button
android:layout_width="203dp"
android:layout_height="90dp"
android:id="@+id/zero"
android:layout_below="@+id/one"
android:layout_alignLeft="@+id/one"
android:layout_alignStart="@+id/one"
android:layout_marginTop="-10dp"
android:background="@drawable/zero_btn"
android:layout_alignParentLeft="true"
android:layout_marginLeft="-7dp" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/two"
android:layout_above="@+id/zero"
android:layout_alignLeft="@+id/five"
android:layout_alignStart="@+id/five"
android:background="@drawable/two_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/three"
android:layout_below="@+id/five"
android:layout_alignLeft="@+id/six"
android:layout_alignStart="@+id/six"
android:layout_marginTop="-10dp"
android:background="@drawable/three_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/add"
android:layout_toEndOf="@+id/three"
android:layout_below="@+id/six"
android:layout_alignLeft="@+id/sub"
android:layout_alignStart="@+id/sub"
android:layout_marginTop="-10dp"
android:background="@drawable/plus_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/dot"
android:layout_below="@+id/two"
android:layout_alignRight="@+id/three"
android:layout_alignEnd="@+id/three"
android:layout_marginTop="-10dp"
android:background="@drawable/dot_btn" />
<Button
android:layout_width="100dp"
android:layout_height="90dp"
android:id="@+id/equ"
android:layout_toEndOf="@+id/dot"
android:layout_below="@+id/three"
android:layout_alignLeft="@+id/add"
android:layout_alignStart="@+id/add"
android:layout_marginTop="-10dp"
android:background="@drawable/equ_btn" />
</RelativeLayout>
Ответы
Ответ 1
Вы должны использовать layout_weight
для достижения того, чего хотите, и который будет использоваться путем обертывания каждой строки кнопок внутри LinearLayout
, и все, что LinearLayouts
плюс TextView
будет обернуто внутри одного big LinearLayout
вместо RelativeLayout
, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff000000"
android:orientation="vertical"
android:weightSum="6" >
<TextView
android:id="@+id/disp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:inputType="none"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/white"
android:textSize="32sp"
android:textStyle="normal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:weightSum="4" >
<Button
android:id="@+id/clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:background="@drawable/clear_btn" />
<!-- then the three remaining buttons -->
<LinearLayout />
<!-- then the four remaining rows -->
<!-- in the last row the "0" button will have layout_weight="2" NOT "1" -->
</LinearLayout>
</LinearLayout>
UPDATE:
используйте ImageButtons вместо кнопок для лучшей масштабируемости, и именно так вы должны его использовать:
<ImageButton
android:id="@+id/clear"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:background="@android:color/transparent"
android:src="@drawable/clear_btn"
android:scaleType="fitCenter" />
<!-- and so for all Buttons -->
Обратите внимание, что мы изменили:
1- layout_height
: от wrap_content
до match_parent
.
2- background
: удаление drawable (clear_btn) и создание transparent
.
и мы добавили:
1- src
: присвоить ему drawable (clear_btn).
2- scaleType
: сделать его fitCenter
, чтобы он масштабировался во всей доступной области, не нарушая коэффициент масштабирования изображения.
PS: в случае, если вы хотите, чтобы кнопка отображала всю область погоды, она масштабируема или нет, измените scaleType
с fitCenter
на fitXY
(возможно, вам понадобится для кнопки 0 ".
Ответ 2
При установке высоты и ширины кнопки в android, использование значений пикселей фиксированной плотности приведет к точным размерам на всех экранах. Используя значения ширины как wrap_content
, fill_parent
, веса и т.д. Заставят кнопку смотреть в соответствии с плотностью экрана.
Попробуйте воспользоваться этой ссылкой один раз: - Рекомендации для пользовательского интерфейса
Ответ 3
Если вы хотите поддерживать несколько экранов, никогда не перетаскивайте и не изменяйте размеры вручную.
Вы можете проверить атрибут android:layout_weight
и LinearLayout
Ответ 4
Решение 1:
используйте dimens.xml для указания и высоты для кнопок.
для планшета, создайте значения папки-sw600dp, values-sw720dp и поместите свой dimens.xml внутрь.
Решение 2:
Use linearlayout and layout_weight property.