高分辨率设备android中的布局问题

时间:2016-09-01 05:41:35

标签: android android-layout android-linearlayout

我想在listview行文件下面制作 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">

    <RelativeLayout
        android:id="@+id/rel_items"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/margin_5dp"
        android:background="@drawable/rect_white">

        <LinearLayout
            android:id="@+id/ll_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="100">

            <LinearLayout
                android:id="@+id/ll_left"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="70">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <CheckBox
                        android:id="@+id/ckh"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="@dimen/margin_5dp" />

                    <customtext.BoldText
                        android:id="@+id/task_title"
                        style="@style/NormalTextView"
                        android:layout_marginLeft="@dimen/margin_2dp"
                        android:layout_marginRight="@dimen/margin_5dp"
                        android:layout_marginTop="@dimen/margin_10dp"
                        android:layout_toRightOf="@+id/ckh"
                        android:singleLine="false"
                        android:text="Title"
                        android:textColor="@android:color/black"
                        android:textSize="@dimen/text_11" />

                    <customtext.RegularText
                        android:id="@+id/task_assign"
                        style="@style/NormalTextView"
                        android:layout_alignLeft="@+id/task_title"
                        android:layout_below="@+id/task_title"
                        android:layout_marginTop="@dimen/margin_2dp"
                        android:layout_toRightOf="@+id/ckh"
                        android:background="@drawable/rect_full"
                        android:padding="@dimen/margin_2dp"
                        android:text="Title"
                        android:textColor="@android:color/white"
                        android:textSize="@dimen/text_8" />

                    <customtext.RegularText
                        android:id="@+id/task_date"
                        style="@style/NormalTextView"
                        android:layout_alignLeft="@+id/task_assign"
                        android:layout_below="@+id/task_assign"
                        android:paddingBottom="@dimen/margin_5dp"
                        android:text="Title"
                        android:layout_marginTop="@dimen/margin_2dp"
                        android:textColor="@color/dark_gray"
                        android:textSize="@dimen/text_10" />
                </RelativeLayout>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/ll_right"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginBottom="1.5dp"
                android:layout_marginRight="1.5dp"
                android:layout_marginTop="1.5dp"
                android:layout_weight="30"
                android:background="@drawable/rect_task_edit_delete"
                android:gravity="center|right">

                <ImageView
                    android:id="@+id/img_edit"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="@dimen/margin_20dp"
                    android:src="@drawable/edit" />

                <ImageView
                    android:id="@+id/img_delete"

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="@dimen/margin_10dp"
                    android:src="@drawable/delete" />
            </LinearLayout>
        </LinearLayout>


    </RelativeLayout>
</RelativeLayout>

当我在普通设备(如480x800)中运行时,它会提供如下图像的输出 enter image description here

当我在像1080x1920这样的高分辨率设备(320dpi)(索尼xperia z Ultra)中运行时,我给出了以下输出 enter image description here

所以任何想法如何在非常高分辨率的设备中保持这种布局?

7 个答案:

答案 0 :(得分:2)

I have updated your code with images and variables in one of my projects. I recommend you to change the LinearLayout with the weight sum of 100 to a relative layout and put the item you want to fix the size to align parent right. Here is an example which work. You can fix the relativelayout root height. Hope it help

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:id="@+id/rel_items"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_margin="5dp"
    android:background="@android:color/white">

    <RelativeLayout
        android:id="@+id/ll_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/ll_right"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginBottom="1.5dp"
            android:layout_marginRight="1.5dp"
            android:layout_alignParentRight="true"
            android:padding="10dp"
            android:layout_marginTop="1.5dp"
            android:background="@drawable/button_connexion"
            android:gravity="center|right">

            <ImageView
                android:id="@+id/img_edit"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_marginRight="20dp"
                android:src="@drawable/statut_presence_jaune" />

            <ImageView
                android:id="@+id/img_delete"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/statut_presence_vert" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <CheckBox
                    android:id="@+id/ckh"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5dp" />

                <TextView
                    android:id="@+id/task_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="5dp"
                    android:layout_marginTop="20dp"
                    android:layout_toRightOf="@+id/ckh"
                    android:singleLine="false"
                    android:text="Title"
                    android:textColor="@android:color/black"
                    android:textSize="11sp" />

                <TextView
                    android:id="@+id/task_assign"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@+id/task_title"
                    android:layout_below="@+id/task_title"
                    android:layout_marginTop="2dp"
                    android:layout_toRightOf="@+id/ckh"
                    android:background="@android:color/holo_blue_bright"
                    android:padding="2dp"
                    android:text="Title"
                    android:textColor="@android:color/white"
                    android:textSize="8sp" />

                <TextView
                    android:id="@+id/task_date"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@+id/task_assign"
                    android:layout_below="@+id/task_assign"
                    android:paddingBottom="5dp"
                    android:text="Title"
                    android:layout_marginTop="2dp"
                    android:textColor="@android:color/darker_gray"
                    android:textSize="10sp" />
            </RelativeLayout>
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

答案 1 :(得分:2)

使用ID

更改视图的权重
android:id="@+id/ll_left"

到1.并删除ID为

的视图
android:id="@+id/ll_right"

并将其替换为以下代码行:

<LinearLayout
        android:id="@+id/ll_img_edit"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_margin="2dp"
        android:background="@drawable/rect_task_edit_delete"
        android:gravity="center">

        <ImageView
            android:id="@+id/img_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/edit" />

    </LinearLayout>

<LinearLayout
            android:id="@+id/ll_img_delete"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:background="@drawable/rect_task_edit_delete"
            android:gravity="center">

            <ImageView
                android:id="@+id/img_delete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/delete" />

        </LinearLayout>

在此您可以根据您的要求更改保证金值。

答案 2 :(得分:1)

而不是

<LinearLayout
            android:id="@+id/ll_right"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="1.5dp"
            android:layout_marginRight="1.5dp"
            android:layout_marginTop="1.5dp"
            android:layout_weight="30"
            android:background="@drawable/rect_task_edit_delete"
            android:gravity="center|right">

            <ImageView
                android:id="@+id/img_edit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/margin_20dp"
                android:src="@drawable/edit" />

            <ImageView
                android:id="@+id/img_delete"

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/margin_10dp"
                android:src="@drawable/delete" />
        </LinearLayout>

将此用于图像线性布局,您的问题将得到解决......

<LinearLayout
                android:id="@+id/ll_right"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginBottom="1.5dp"
                android:layout_marginRight="1.5dp"
                android:layout_marginTop="1.5dp"
                android:layout_weight="30"
                android:background="@drawable/rect_task_edit_delete"
                android:gravity="center|right">

                <ImageView
                    android:id="@+id/img_edit"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:layout_marginRight="@dimen/margin_20dp"
                    android:src="@drawable/edit" />

                <ImageView
                    android:id="@+id/img_delete"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:layout_marginRight="@dimen/margin_10dp"
                    android:src="@drawable/delete" />
            </LinearLayout>

注意: - 这个问题是由于你使imageView包装内容和线性布局与重量因此线性布局由于其重量调整但是imageView是包装内容。所以它改变设备到设备.....

答案 3 :(得分:1)

在包含图像视图的LinearLayout中删除并编辑。你已经为它们指定了右边距,在这里删除了它和权重。

答案 4 :(得分:1)

只需在下面更改第二个布局,

        <LinearLayout
            android:id="@+id/ll_right"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="1.5dp"
            android:layout_marginRight="1.5dp"
            android:layout_marginTop="1.5dp"
            android:layout_weight="30"
            android:background="@android:color/transparent"
            android:gravity="center|right">

           <LinearLayout
               android:layout_width="wrap_content"
               android:layout_height="match_parent"
               android:background="@drawable/rect_task_edit_delete"
               android:gravity="center|right">

               <ImageView
                   android:id="@+id/img_edit"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="@dimen/margin_20dp"
                   android:src="@drawable/edit" />

               <ImageView
                   android:id="@+id/img_delete"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="@dimen/margin_10dp"
                   android:src="@drawable/delete" />

            </LinearLayout>
        </LinearLayout>

答案 5 :(得分:1)

在第二个布局中使用weightSum属性。

<LinearLayout
            android:id="@+id/ll_right"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="1.5dp"
            android:weighSum = "1"
            android:layout_marginRight="1.5dp"
            android:layout_marginTop="1.5dp"
            android:layout_weight="30"
            android:background="@drawable/rect_task_edit_delete"
            android:gravity="center|right">

            <ImageView
                android:id="@+id/img_edit"
                android:layout_width="0dp"
                android:layout_weight="0.5"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/margin_20dp"
                android:src="@drawable/edit" />

            <ImageView
                android:id="@+id/img_delete"
               android:layout_weight="0.5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/margin_10dp"
                android:src="@drawable/delete" />
        </LinearLayout>

答案 6 :(得分:1)

只需按以下方式添加ImageView权重属性即可。因此,ImageView

都需要相等的宽度

                <ImageView
                    android:id="@+id/img_edit"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="@dimen/margin_20dp"
                    android:src="@drawable/edit"
                    android:layout_weight="1" />

                <ImageView
                    android:id="@+id/img_delete"    
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="@dimen/margin_10dp"
                    android:src="@drawable/delete"
                    android:layout_weight="1" />
            </LinearLayout>