ExpandableListView

1.ExpandableListView的group高度如何自定义?

在group中是采用自定义的布局,但是没有能改变group的高度,后来发现group的高度是系统给定的。需要对group重新配置布局属性,如下:

/*-------------------------------------------
*    改变每个分组的显示时大小
* ---------------------------------------*/
AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, //宽度
            140);//高度
convertView.setLayoutParams(layoutParams);

2.ExpandableListView嵌套ExpandableListView时,里层的ListView无法自适应内部控件的大小

能进行需要效果的处理,但是每一次都需要重新创建View,不能通过如下代码进行处理,不然会出错

if(convertView == null){

}else{

}

第一层Adapter中启动第二层(传入本层的ExpandableListView)

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent){
  //代码
  //。。。。。。

  ExpandableListView expandableListView = (ExpandableListView) convertView.findViewById(R.id.reading_item_expandable_listview);

  //传入`ExpandableListView`
  ReadingItemExpandAdapater readingItemExpandAdapater =
                new ReadingItemExpandAdapater(activity,
                        readingQuestion.getReadingItems(),
                        activity,
                        question.expandableListView);
  //设置适配器
  question.expandableListView.setAdapter(readingItemExpandAdapater);
  fixListViewHeight(question.expandableListView);
}

第二层Adapter的onGroupExpanded中对父层的ListView进行高度的重新计算

  • 点击最里层ExpandableListView时,通过计算让父控件正确展开。
public void onGroupExpanded(int groupPosition){
    fixListViewHeight(expandableListView); //改变父控件大小
}
  • fixListViewHeight是完成 对child View进行高度计算的功能
public void fixListViewHeight(ExpandableListView listView) {
        if(listView == null) return;
        // 如果没有设置数据适配器,则ListView没有子项,返回。
        ListAdapter listAdapter = listView.getAdapter();
        int totalHeight = 0;
        if (listAdapter == null) {
            return;
        }

        for (int index = 0, len = listAdapter.getCount(); index < len; index++) {
            View listViewItem = listAdapter.getView(index , null, listView);

            listViewItem.measure(0, 0);
            // 计算所有子项的高度和
            totalHeight += listViewItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        // listView.getDividerHeight()获取子项间分隔符的高度
        // params.height设置ListView完全显示需要的高度
        params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

3. ExpandableListView如何展开

展开

//展开Group
for(int i = 0; i < expandableAdapater.getGroupCount(); i++)
{
        //展开组别
        expandableListView.expandGroup(i);

        //下面这个无法实现
        //expandableAdapater.onGroupExpanded(i);
}

收缩

//收缩ExpandableListView

for(int groupPosition = 0; groupPosition < expandableAdapater.getGroupCount(); groupPosition++)
{
        expandableListView.collapseGroup(groupPosition);
}

两层ExpandableListView嵌套,外加一层ListView,如何展开所有内容?

4. 动态获得控件

ExpandableListView中经常需要动态创建一些控件,简单代码如下:

    private TextView getTextView(){
        //属性如下
        AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        TextView textView = new TextView(activity);
        textView.setLayoutParams(lp);
        //偏移
        textView.setPadding(50,0,0,0);
        textView.setTextSize(30);
        //内部文字位置
        textView.setGravity(Gravity.CENTER_VERTICAL);

        return textView;
    }

5.getHeight和getMeasureHeight

  • getWidth(): View在設定好佈局後整個View的寬度。
  • getMeasuredWidth():對View上的內容進行測量後得到的View內容佔據的寬度
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值