我在RelativeLayout中使用ListView创建小部件,其中父级是线性布局。
显示ListView的工作几乎总是正确的,但是有时ListView的高度小于实际的wrap_content。在屏幕截图上可以看到示例。
ListView的高度随机确定或错误。我找不到问题所在了。
我的目的是使ListView在小部件中垂直居中。
使用了RemoteViewsService.RemoteViewsFactory。
您可以检查附加的XML文件。
以及用于更好地理解该问题的屏幕截图。 Right Height | Wrong Height
<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>
<?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相同的高度,因为文本大小相等。实际上,应该如此。
谢谢
答案 0 :(得分:0)
Vojtech,谢谢。
我在下面的代码中添加了SystemClock.sleep,它可以正常工作。
public RemoteViews getViewAt(int position) {
SystemClock.sleep(50);
RemoteViews views = new RemoteViews(mContext.getPackageName(), R.layout.widget_row);
再次感谢!