如何使视图与设备保持良好对齐

时间:2016-11-29 07:58:59

标签: android android-layout listview

我是一个由 ImageView ,一些 TextView 和一个Button组成的经过精心设计的 ListView 。当我在华为列表视图上的代码上运行代码并且其中的视图是完全一致的,但是当我在三星Galaxy平板电脑上运行相同的代码时,视图会混淆,如下图所示

请让我知道我该怎么做才能使观点与设备完全一致

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

<TableRow
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:weightSum="5">

    <ImageView
        android:id="@+id/vers_img"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_weight="3"
        android:orientation="vertical"
        android:weightSum="3">

        <TextView
            android:id="@+id/ver_name"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_marginStart="@dimen/versicherungsListeActivity_vers_liste_margin"
            android:layout_weight="1"
            android:gravity="start"
            android:text="ver_name"
            android:textSize="16dp"/>

        <TextView
            android:id="@+id/ver_ges"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_marginStart="@dimen/versicherungsListeActivity_vers_liste_margin"
            android:layout_weight="1"
            android:gravity="start"
            android:text="ver_ges" />

        <RelativeLayout
            android:id="@+id/versiecherungsListeActivity_rellay_ver_status"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:paddingStart="@dimen/versicherungsListeActivity_vers_liste_padding"
            android:paddingEnd="@dimen/versicherungsListeActivity_vers_liste_padding"
            android:layout_marginStart="@dimen/versicherungsListeActivity_vers_liste_margin"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="center_horizontal|center_vertical"
            android:background="@drawable/round_corners">

            <TextView
                android:id="@+id/versicherungsListeActivity_ver_yearly_cost"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="409" />
            <TextView
                android:id="@+id/versicherungsListeActivityMain_euro_sign"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_toEndOf="@id/versicherungsListeActivity_ver_yearly_cost"
                android:text="€/Jahr" />

            <TextView
                android:id="@+id/versicherungsListeActivity_ver_in_bearbeitung"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:visibility="gone"
                android:text="In Bearbeitung" />
        </RelativeLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/versButton_layout"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="right|top"
        android:focusable="false"
        android:focusableInTouchMode="false"/>

    <Button
        android:id="@+id/vers_pers_button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_weight="1"
        android:background="@android:drawable/ic_menu_info_details"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center_horizontal|center_vertical"
        android:scaleX=".6"
        android:scaleY="0.7" />

</TableRow>


</TableLayout>

图片

enter image description here

3 个答案:

答案 0 :(得分:0)

 <TextView
                android:id="@+id/versicherungsListeActivity_ver_yearly_cost"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="409" />
            <TextView
                android:id="@+id/versicherungsListeActivityMain_euro_sign"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toEndOf="@id/versicherungsListeActivity_ver_yearly_cost"
                android:text="€/Jahr" />

            <TextView
                android:id="@+id/versicherungsListeActivity_ver_in_bearbeitung"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone"
                android:text="In Bearbeitung" />

将上面的代码替换为您的布局

答案 1 :(得分:0)

表格行未设置为显式高度,其第一个子项的高度为ID为vers_img的图像视图的高度为60dp。这使得下一个孩子的relativelayout也采取相同的整体高度,即60dp ......

注意:dp的px值可能会因设备的分辨率而在设备之间发生变化..我更喜欢用sp代替..

答案 2 :(得分:0)

我通过将第一个linearLayout设置为android:layout_height =&#34; wrap_content&#34;来解决它。

实际上,@ Senthil Vidhiyakar的答案帮助我解决了这个问题,因为在他的回答中他提到了TableRow元素 从第一个第一个孩子获取它的高度,在我的情况下,它是ImageView元素。

因此,如果LinearLayout设置为android:layout_height =&#34; match_parent&#34;,那么它将匹配其父级的高度,即  高度与ImageView元素一样高的元素。因此,通过将LinearLayout设置为android:layout_height =&#34; wrap_content&#34;,LinearLayout将展开以包含所有三个子视图