我应该选择哪种布局和root来混合Android中的可扩展(或不是)块?

时间:2016-07-27 13:47:48

标签: android layout

我从互联网上获取数据,我需要在布局中打印所有数据。

问题是在他们显示之前我不知道,他们的文字长度

我想过做这样的布局:

The layout I'd need

其中标题和国家/地区块不应该是可点击和/或可展开的,但 Actors块应该是@authors文本太长的地方。

事实上,它应该与Google Actuality显示非常相似:

The layout I need is similar to Google Actuality

我看过许多布局,例如ExpandableViewList或RecyclerView(也是TableLayout和ListView),但我无法找到符合我要求的布局

2 个答案:

答案 0 :(得分:0)

您可以执行包含LinearLayout的项目的RecyclerView(它可以更快地膨胀,但您可以使用其他项目),您可以在其中存储3个CardView,每个CardView包含一个TextView。第一个和第二个CardViews应包含Title和Country的TextViews,但第三个CardView也应该有OnClick事件,因此如果TextView文本大小大于此值,您将能够更改CardView的高度(又称扩展和缩小)。恒定的阈值。

答案 1 :(得分:0)

您可以使用展开ExpandableListView的自定义适配器在BaseExpandableListAdapter中显示它。

您的自定义适配器看起来应该是这样的。

class Adapter extends BaseExpandableListAdapter {
    static class Elem {
        String title;
        String desc;
        boolean canExpand;
    }

    private List<Elem> mData;

    public void setData(List<Elem> data) {
        mData = data;
    }

    @Override
    public int getGroupCount() {
       return mData.size();
    }

    @Override
    public Object getGroup(int groupPosition) { return mData.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        Elem e = (Elem)getGroup(groupPosition);
        return e.desc;
    } 

    @Override
    public int getChildrenCount(int groupPosition) {
       Elem e = mData.get(groupPosition);
       if (!e.canExpand) return 0;

       // check if either e.title OR e.desc is long enough
       // to expand
       if (is_long_enough( ...)) 
           return 1;
       return 0;
    }

    // then override the getGroupView and getChildView methods to return your views
}

在布局中声明ExpandableListView时,将其groupIndicator设置为null

            <ExpandableListView
            android:id="@+id/list_id"
            android:groupIndicator="@null"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:choiceMode="singleChoice" />