Search code examples
androidandroid-layoutandroid-linearlayoutandroid-constraintlayoutandroid-framelayout

android - layout looks messed up in some devices


I'm having a very weird problem with a layout. It looks as designed in eclipse XML editor and in my Samsung galaxy but it's messed up in my old phone xperia x10 mini. I can only assume that this would occur in other devices too.

If someone could help fix this I would be grateful.

Here are the two screenshots and the XML code.

how it looks in eclipse layout editor and in my Samsung galaxy S4 mini

enter image description here

how it looks in Sony xperia x10 mini

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_height="wrap_content" > 

    <FrameLayout
        android:layout_marginTop="7dp"
        android:layout_gravity="center" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <View  android:layout_marginTop="19dp"  android:layout_marginLeft="19dp"  android:layout_height="249dp" android:layout_width="2dp"    android:background="#B2CFEF"/>
        <View  android:layout_marginTop="19dp"  android:layout_marginLeft="189dp" android:layout_height="249dp" android:layout_width="2dp"    android:background="#B2CFEF"/>
        <View  android:layout_marginTop="18dp"  android:layout_marginLeft="20dp"  android:layout_height="2dp"   android:layout_width="170dp"  android:background="#B2CFEF"/>
        <View  android:layout_marginTop="267dp" android:layout_marginLeft="19dp"  android:layout_height="2dp"   android:layout_width="171dp"  android:background="#B2CFEF"/>

        <ImageView  style="@style/ta_img"  android:id="@+id/ta_lu"                                     android:layout_marginTop="52dp"   />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_lc"                                     android:layout_marginTop="124dp"  />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_ld"                                     android:layout_marginTop="197dp"  />

        <ImageView  style="@style/ta_img"  android:id="@+id/ta_ru"  android:layout_marginLeft="170dp"  android:layout_marginTop="52dp"   />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_rc"  android:layout_marginLeft="170dp"  android:layout_marginTop="124dp"  />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_rd"  android:layout_marginLeft="170dp"  android:layout_marginTop="197dp"  />

        <ImageView  style="@style/ta_img"  android:id="@+id/ta_tl"  android:layout_marginLeft="37dp"                                     />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_tc"  android:layout_marginLeft="84dp"                                     />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_tr"  android:layout_marginLeft="132dp"                                    /> 

        <ImageView  style="@style/ta_img"  android:id="@+id/ta_bl"  android:layout_marginLeft="37dp"   android:layout_marginTop="249dp"  />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_bc"  android:layout_marginLeft="84dp"   android:layout_marginTop="249dp"  />
        <ImageView  style="@style/ta_img"  android:id="@+id/ta_br"  android:layout_marginLeft="132dp"  android:layout_marginTop="249dp"  />

    </FrameLayout>

</LinearLayout>

and this is the style of the ImageViews

<style name="ta_img" > 
        <item name="android:layout_width">40dp</item>
        <item name="android:layout_height">40dp</item>
        <item name="android:clickable">true</item>
        <item name="android:src">@drawable/ta</item>    
</style>

Any ideas???


Solution

  • A constraint layout can easily adjust to fit any screen, without any complex hierarchies, like this:

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <View
        android:id="@+id/left_border"
        android:layout_width="2dp"
        android:layout_height="0dp"
        android:layout_margin="@dimen/border_margin"
        android:background="#B2CFEF"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <ImageView
        android:id="@+id/ta_lu"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/left_border"
        app:layout_constraintRight_toRightOf="@id/left_border"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/ta_lc" />
    
    <ImageView
        android:id="@+id/ta_lc"
        app:layout_constraintLeft_toLeftOf="@id/left_border"
        app:layout_constraintRight_toRightOf="@id/left_border"
        app:layout_constraintTop_toBottomOf="@id/ta_lu"
        app:layout_constraintBottom_toTopOf="@id/ta_ld"
        style="@style/ta_img" />
    
    <ImageView
        android:id="@+id/ta_ld"
        app:layout_constraintLeft_toLeftOf="@id/left_border"
        app:layout_constraintRight_toRightOf="@id/left_border"
        app:layout_constraintTop_toBottomOf="@id/ta_lc"
        app:layout_constraintBottom_toBottomOf="parent"
        style="@style/ta_img" />
    
    <View
        android:id="@+id/right_border"
        android:layout_width="2dp"
        android:layout_height="0dp"
        android:layout_margin="@dimen/border_margin"
        android:background="#B2CFEF"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <ImageView
        android:id="@+id/ta_ru"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/right_border"
        app:layout_constraintRight_toRightOf="@id/right_border"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/ta_rc" />
    
    <ImageView
        android:id="@+id/ta_rc"
        app:layout_constraintLeft_toLeftOf="@id/right_border"
        app:layout_constraintRight_toRightOf="@id/right_border"
        app:layout_constraintTop_toBottomOf="@id/ta_ru"
        app:layout_constraintBottom_toTopOf="@id/ta_rd"
        style="@style/ta_img" />
    
    <ImageView
        android:id="@+id/ta_rd"
        app:layout_constraintLeft_toLeftOf="@id/right_border"
        app:layout_constraintRight_toRightOf="@id/right_border"
        app:layout_constraintTop_toBottomOf="@id/ta_rc"
        app:layout_constraintBottom_toBottomOf="parent"
        style="@style/ta_img" />
    
    <View
        android:id="@+id/top_border"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_margin="@dimen/border_margin"
        android:background="#B2CFEF"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <ImageView
        android:id="@+id/ta_tl"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="@id/ta_tc"
        app:layout_constraintTop_toTopOf="@id/top_border"
        app:layout_constraintBottom_toBottomOf="@id/top_border" />
    
    <ImageView
        android:id="@+id/ta_tc"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/ta_tl"
        app:layout_constraintRight_toRightOf="@id/ta_tr"
        app:layout_constraintTop_toTopOf="@id/top_border"
        app:layout_constraintBottom_toBottomOf="@id/top_border" />
    
    <ImageView
        android:id="@+id/ta_tr"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/ta_tc"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@id/top_border"
        app:layout_constraintBottom_toBottomOf="@id/top_border" />
    
    <View
        android:id="@+id/bottom_border"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_margin="@dimen/border_margin"
        android:background="#B2CFEF"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />
    
    <ImageView
        android:id="@+id/ta_bl"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="@id/ta_bc"
        app:layout_constraintTop_toTopOf="@id/bottom_border"
        app:layout_constraintBottom_toBottomOf="@id/bottom_border" />
    
    <ImageView
        android:id="@+id/ta_bc"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/ta_bl"
        app:layout_constraintRight_toRightOf="@id/ta_br"
        app:layout_constraintTop_toTopOf="@id/bottom_border"
        app:layout_constraintBottom_toBottomOf="@id/bottom_border" />
    
    <ImageView
        android:id="@+id/ta_br"
        style="@style/ta_img"
        app:layout_constraintLeft_toLeftOf="@id/ta_bc"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@id/bottom_border"
        app:layout_constraintBottom_toBottomOf="@id/bottom_border" />
    

    To adjust the margins, just change border_margin in dimens.xml. I used the following value in the screenshot below, which you can adjust at will:

        <dimen name="border_margin">40dp</dimen>
    

    Here's a screenshot:

    screenshot of the constraint layout