arsena
arsena

Reputation: 1975

scale buttons to screen size

I have RelativeLayout with 3 LinearLayouts where I have buttons located. 2 button in each layout. button sizes remain same on devices with different size: Nexus 7 - http://i.imgur.com/rfCy2Me.png,

Nexus 5 - !

enter image description here

but I want buttons to resize for different screen sizes. this is the source of layout file:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<LinearLayout
    android:orientation="horizontal"
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/superviserlinearLayout1"
    android:layout_centerHorizontal="true"
    android:paddingTop="5dp">
    <Button
        android:text="აგენტები"
        android:id="@+id/superviserBtnAgents"
        android:drawableTop="@drawable/admin"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="145dp"
        android:layout_height="145dp" />
    <Button
        android:text="ობიექტები"
        android:id="@+id/superviserBtnObjects"
        android:drawableTop="@drawable/store"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="145dp"
        android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
    android:orientation="horizontal"
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/superviserlinearLayout1"
    android:id="@+id/superviserlinearLayout2"
    android:layout_centerHorizontal="true">
    <Button
        android:text="დებიტორები"
        android:drawableTop="@drawable/money"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="145dp"
        android:layout_height="145dp"
        android:id="@+id/superviserBtnDebitors" />
    <Button
        android:text="საწყობი"
        android:drawableTop="@drawable/production"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="145dp"
        android:layout_height="145dp"
        android:id="@+id/superviserBtnDepot" />
</LinearLayout>
<LinearLayout
    android:orientation="horizontal"
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/superviserlinearLayout2"
    android:id="@+id/superviserlinearLayout3"
    android:layout_centerHorizontal="true">
    <Button
        android:text="ინკასაცია"
        android:drawableTop="@drawable/atm"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="145dp"
        android:layout_height="145dp"
        android:id="@+id/superviserBtnIncasation" />
    <Button
        android:text="შეტყობინებები"
        android:drawableTop="@drawable/notes"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_width="match_parent"
        android:layout_height="145dp"
        android:id="@+id/superviserBtnNotes" />
</LinearLayout>

any suggestions how to achieve this?

Edit: I need background images to stretch, even if they appear pixelated.

Upvotes: 1

Views: 3596

Answers (2)

MysticMagicϡ
MysticMagicϡ

Reputation: 28823

  1. Remove the hardcoded width of buttons.

  2. Change the LinearLayout width to match_parent instead of wrap_content, and use weight for buttons.

Something like:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minHeight="25px"
    android:minWidth="25px"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/superviserlinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:minHeight="25px"
        android:minWidth="25px"
        android:orientation="horizontal"
        android:paddingTop="5dp" 
        android:weightSum="2">

        <Button
            android:id="@+id/superviserBtnAgents"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="145dp"
            android:drawableTop="@drawable/ic_launcher"
            android:text="აგენტები"
            android:textSize="14sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/superviserBtnObjects"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:drawableTop="@drawable/ic_launcher"
            android:text="ობიექტები"
            android:textSize="14sp"
            android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/superviserlinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/superviserlinearLayout1"
        android:layout_centerHorizontal="true"
        android:minHeight="25px"
        android:minWidth="25px"
        android:orientation="horizontal" 
        android:weightSum="2">

        <Button
            android:id="@+id/superviserBtnDebitors"
            android:layout_width="0dp"
            android:layout_height="145dp"
            android:drawableTop="@drawable/ic_launcher"
            android:text="დებიტორები"
            android:textSize="14sp"
            android:textStyle="bold" 
            android:layout_weight="1"/>

        <Button
            android:id="@+id/superviserBtnDepot"
            android:layout_width="0dp"
            android:layout_height="145dp"
            android:drawableTop="@drawable/ic_launcher"
            android:text="საწყობი"
            android:textSize="14sp"
            android:textStyle="bold" 
            android:layout_weight="1"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/superviserlinearLayout3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/superviserlinearLayout2"
        android:layout_centerHorizontal="true"
        android:minHeight="25px"
        android:minWidth="25px"
        android:weightSum="2"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/superviserBtnIncasation"
            android:layout_width="0dp"
            android:layout_height="145dp"
            android:drawableTop="@drawable/ic_launcher"
            android:text="ინკასაცია"
            android:textSize="14sp"
            android:textStyle="bold" 
            android:layout_weight="1"/>

        <Button
            android:id="@+id/superviserBtnNotes"
            android:layout_width="0dp"
            android:layout_height="145dp"
            android:drawableTop="@drawable/ic_launcher"
            android:text="შეტყობინებები"
            android:textSize="14sp"
            android:textStyle="bold" 
            android:layout_weight="1"/>
    </LinearLayout>

</RelativeLayout>

Hope it helps.

Upvotes: 1

Javed
Javed

Reputation: 169

To support different screen sizes you have to put appropriate sized images in the respective drawable folders, according to google these are the recommended sizes:

xlarge screens are at least 960dp x 720dp (xxhdpi folder)
large screens are at least 640dp x 480dp  (xhdpi folder)
normal screens are at least 470dp x 320dp (hdpi folder or mdpi (depends))
small screens are at least 426dp x 320dp  (ldpi)

Note: These minimum screen sizes were not as well defined prior to Android 3.0, so you may encounter some devices that are mis-classified between normal and large. These are also based on the physical resolution of the screen, so may vary across devices—for example a 1024x720 tablet with a system bar actually has a bit less space available to the application due to it being used by the system bar. -Google

Upvotes: 1

Related Questions