如何防止imageview在recyclerview项上跳跃?

时间:2019-08-08 11:34:39

标签: android android-layout

我有这样的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:layout_marginTop="5dp"
    android:layout_marginEnd="5dp"
    android:background="@drawable/message_list_item_bg"
    android:orientation="vertical"
    android:padding="5dp">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_job_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3.5"
            android:ellipsize="end"
            android:fontFamily="@font/opensans_semibold"
            android:singleLine="true"
            android:textColor="#333333"
            app:autoSizeMaxTextSize="20sp"
            app:autoSizeMinTextSize="8sp"
            app:autoSizeStepGranularity="2sp"
            app:autoSizeTextType="uniform" />

        <TextView
            android:id="@+id/tv_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:fontFamily="@font/opensans_semibold"
            android:gravity="end"
            android:textSize="12sp" />

    </LinearLayout>

    <TextView
        android:id="@+id/tv_address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:ellipsize="end"
        android:fontFamily="@font/opensans_regular"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="#999999"
        app:autoSizeMaxTextSize="20sp"
        app:autoSizeMinTextSize="8sp"
        app:autoSizeStepGranularity="2sp"
        app:autoSizeTextType="uniform" />

    <com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar
        android:id="@+id/loader"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_gravity="center_horizontal|center_vertical"
        android:visibility="gone"
        app:mlpb_arrow_height="2dp"
        app:mlpb_arrow_width="7dp"
        app:mlpb_enable_circle_background="true"
        app:mlpb_progress_stoke_width="2.5dp"
        app:mlpb_show_arrow="false" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_company"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:fontFamily="@font/opensans_regular"
            android:singleLine="true"
            android:textColor="#666666"
            android:layout_weight="3.5"
            app:autoSizeMaxTextSize="20sp"
            app:autoSizeMinTextSize="8sp"
            app:autoSizeStepGranularity="2sp"
            app:autoSizeTextType="uniform" />


        <ImageView
            android:id="@+id/add_to_notepad"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:background="@drawable/add_to_notepad"
            android:layout_gravity="end"/>


        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:gravity="end"
            android:visibility="gone" />
    </LinearLayout>


</LinearLayout>

和列表项包含的我的图像视图不能停留在同一位置。看起来像这样:

enter image description here

也许我的适配器有问题,如果我的适配器有问题,我将添加其代码。我尝试将RelativeLayout与它的标签一起使用,并且我发现LinearLayout的权重对解决此问题没有帮助。那么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我弄清楚了它发生的原因。问题在这里:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_company"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:fontFamily="@font/opensans_regular"
            android:singleLine="true"
            android:textColor="#666666"
            android:layout_weight="3.5"
            app:autoSizeMaxTextSize="20sp"
            app:autoSizeMinTextSize="8sp"
            app:autoSizeStepGranularity="2sp"
            app:autoSizeTextType="uniform" />


        <ImageView
            android:id="@+id/add_to_notepad"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:background="@drawable/add_to_notepad"
            android:layout_gravity="end"/>


        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:gravity="end"
            android:visibility="gone" />
    </LinearLayout>

您已将TextView宽度设置为0dp,并且没有赋予任何元素权重。这意味着ImageView实际上依赖于您的TextView,因此随着其中内容的更改而更改。 希望将其替换为以下代码可能会对您有所帮助。

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_company"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:fontFamily="@font/opensans_regular"
            android:singleLine="true"
            android:textColor="#666666"
            app:autoSizeMaxTextSize="20sp"
            app:autoSizeMinTextSize="8sp"
            android:layout_marginRight="30dp"
            app:autoSizeStepGranularity="2sp"
            app:autoSizeTextType="uniform" />


        <ImageView
            android:id="@+id/add_to_notepad"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_alignParentRight="true"
            android:background="@drawable/add_to_notepad" />


        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_alignParentRight="true"
            android:visibility="gone" />
    </RelativeLayout>

建议:我在您的代码中看到很多嵌套,请尝试使用“约束布局”或“相对布局”来制作更简单的XML。祝你好运。