Search code examples
androidandroid-layoutmultiscreen

Android multi-screen layout support doesn't work


I am trying to achieve multi-screen support on my android app, so I provided several layout folders "layout-sw480dp", "layout-sw600dp", "layout-sw720dp" and same named xml files. I use 720dp layout as my main and everything looks nice on 10.1" tablet, but 4.3" phone fails to load corresponding layout. I have read tons of articles and different questions, but still can't figure out solution. Could anyone help me to solve this out?

Example of default xml layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/blackboard"
android:orientation="vertical" >

<TextView
    android:id="@+id/welcomeTextView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_marginTop="40dp"
    android:text="@string/welcomeLabel"
    android:textColor="@color/white"
    android:textSize="56sp" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginLeft="55dp"
    android:layout_marginTop="30dp"
    android:weightSum="100" >

    <TextView
        android:id="@+id/nameLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:text="@string/nameLabel"
        android:textColor="@color/white"
        android:textSize="26sp" />

    <EditText
        android:id="@+id/nameEditText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_weight="20"
        android:background="@color/white"
        android:textColor="@color/blue"
        android:textSize="26sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingLeft="55dp"
    android:paddingTop="20dp"
    android:weightSum="100" >

    <TextView
        android:id="@+id/eqNumberLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:text="@string/eqNumberLabel"
        android:textColor="@color/white"
        android:textSize="26sp" />

    <EditText
        android:id="@+id/eqNumberEditText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_weight="10"
        android:background="@color/white"
        android:inputType="number"
        android:textColor="@color/blue"
        android:textSize="26sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:layout_marginTop="20dp">

    <CheckBox
        android:id="@+id/reducedCheckBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="55dp"
        android:layout_marginRight="10dp"
        android:button="@drawable/checkbox"
        android:layout_gravity="center" >
    </CheckBox>

    <TextView
        android:id="@+id/reducedLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/reducedLabel"
        android:textColor="@color/white"
        android:textSize="36sp" />
</LinearLayout>

<Button
    android:background="@drawable/begin_button"
    android:layout_marginTop="20dp"
    android:id="@+id/beginButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:enabled="false"
    android:text="@string/beginButton"
    android:textColor="@color/black" 
    android:textSize="36sp"/>


Solution

  • I had same problem. Now I just resize my layouts in onCreate, onConfigurationChanged, and at other times in code. This works for ANY size screen. Code below gives the devices actual pixels. Can you provide your default xml?

    DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        final float width = dm.widthPixels;
        final float height = dm.heightPixels;