我正在使用nhaarman的ListViewAnimations(http://nhaarman.github.io/ListViewAnimations/)来实现可扩展列表视图,其中每行有一个父视图和一个子视图,当用户单击父视图时会扩展该视图。子行有两个文本视图,高度可变。但是,当列表视图呈现并且我单击以展开子视图时,它不会扩展到足以显示所有内容。
这是我的子视图布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_child"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:paddingBottom="20dp"
android:paddingLeft="20dp"
android:paddingRight="20dp" >
<ImageView
android:id="@+id/listItemArrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:contentDescription="@null" />
<RelativeLayout
android:id="@+id/listItemInfoContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/listItemTitle"
style="@style/ScentTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" />
<TextView
android:id="@+id/listItemDetails"
style="@style/itemDetails"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/listItemTitle" />
<Button
android:id="@+id/listItemShopNowButton"
style="@style/itemButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/listItemDetails"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:text="@string/shop_now" />
</RelativeLayout>
</RelativeLayout>
我最初将文本视图的layout_height设置为fill_parent,但将它们更改为wrap_content。这似乎也没有解决它。有没有人遇到过类似的问题。
答案 0 :(得分:1)
你可以尝试这个,你必须修改ListViewAnimations库中的ExpandableListItemAdapter.java。
用这个替换animateExpanding()方法,以便它包装整个扩展布局:
public static void animateExpanding(final View view) {
/*
* Set this view to invisible so that the size can be measured. If it's set to View.VISIBLE here
* the maximized layout appears to flicker in before animating.
*/
view.setVisibility(View.INVISIBLE);
view.post(new Runnable() {
@Override
public void run() {
/*
* Do view.getWidth in a view.post thread or else the first view.getWidth will always be 0.
*
* The width MeasureSpec cannot be set to UNSPECIFIED here or else the height of wrapped
* textViews gets calculated as if it's a single infinitely long line.
*/
int widthSpec = View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.AT_MOST);
int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthSpec, heightSpec);
ValueAnimator animator = createHeightAnimator(view, 0, view.getMeasuredHeight());
animator.start();
view.setVisibility(View.VISIBLE);
}
});
}
问题原来在于textViews包装文本被计算为好像是一行。如果您的布局没有包装文本,那么该库就可以了。
检查https://github.com/nhaarman/ListViewAnimations/issues/61,以防Niek Haarman将修复程序更新为其他更优雅的解决方案。