如何修复“小部件中的垂直对齐ListView-高度的大小有时小于文本内容”

时间:2019-08-27 09:18:54

标签: android android-layout

我在RelativeLayout中使用ListView创建小部件,其中父级是线性布局。

显示ListView的工作几乎总是正确的,但是有时ListView的高度小于实际的wrap_content。在屏幕截图上可以看到示例。

ListView的高度随机确定或错误。我找不到问题所在了。

我的目的是使ListView在小部件中垂直居中。

使用了RemoteViewsService.RemoteViewsFactory。

您可以检查附加的XML文件。

以及用于更好地理解该问题的屏幕截图。 Right Height | Wrong Height


Widget.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayoutWidgetScrollable"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="2dp"
    android:layout_marginTop="2dp"
    android:layout_marginRight="2dp"
    android:layout_marginBottom="2dp"
    android:orientation="horizontal"
    android:padding="@dimen/widget_margin">

    <ImageView
        android:id="@+id/imageViewVectorArrowL"
        android:layout_width="24dp"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|center_vertical"
        android:contentDescription="@string/share_quote_button" />

    <RelativeLayout
        android:id="@+id/relativeLayoutWidgetScrollable"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <ListView
            android:id="@+id/listViewWidget"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:foregroundGravity="center_vertical"
            android:layout_centerInParent="true"

            android:layout_margin="0dp"

            android:footerDividersEnabled="false"
            android:headerDividersEnabled="false"
            android:divider="@null"
            android:dividerHeight="0dp"

            android:scrollbars="none"
            />
        <!--sibling with empty view for ListView-->
        <TextView
            android:id="@+id/empty_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"/>

    </RelativeLayout>
    <ImageView
        android:id="@+id/imageViewVectorArrowR"
        android:layout_width="24dp"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|center_vertical"
        android:contentDescription="@string/share_quote_button" />

    <ImageView
        android:id="@+id/imageViewVectorButton"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="top|center_vertical"
        android:layout_marginStart="-24dp"
        android:layout_marginLeft="-24dp"
        android:contentDescription="@string/share_quote_button" />

    <ImageView
        android:id="@+id/imageViewVectorButtonTts"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="bottom|center_vertical"
        android:layout_marginStart="-24dp"
        android:layout_marginLeft="-24dp"
        android:contentDescription="@string/share_quote_button" />

</LinearLayout>

Row.xml

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

    <TextView
        android:id="@+id/textViewFortudeInListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="true"
        android:contentDescription="@string/widget_initializing_title"
        android:gravity="center_horizontal"
        android:text="@string/widget_initializing_title"
        android:textColor="@color/black"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/textViewAuthorInListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="true"
        android:contentDescription="@string/widget_initializing_title"
        android:gravity="end"
        android:textColor="@color/black"
        android:textSize="16sp" />

</LinearLayout>

我希望Show ListView总是能得到与ListView相同的高度,因为文本大小相等。实际上,应该如此。

谢谢

1 个答案:

答案 0 :(得分:0)

Vojtech,谢谢。

我在下面的代码中添加了SystemClock.sleep,它可以正常工作。

public RemoteViews getViewAt(int position) {
    SystemClock.sleep(50);
    RemoteViews views = new RemoteViews(mContext.getPackageName(), R.layout.widget_row);

再次感谢!