android 设置item高度自适应,Android应用开发ListView根据屏幕高度自适应设置Item的高度(Android)...

本文将带你了解Android应用开发ListView根据屏幕高度自适应设置Item的高度(Android),希望本文对大家学Android有所帮助。

<

假设一个页面的ListView要显示6个Item,根据屏幕的高度不同,Item的高度也不同。

思路:在xml文件里设置ListView高度:

android:layout_height="match_parent"

在程序里的适配器中的getView函数中获取屏幕的高度,并给每个Item赋高度:

@Override   public View getView(int position, View view, ViewGroup viewGroup)   {       ViewHolder viewHolder = null;       if (view == null)       {           viewHolder = new ViewHolder();           view = LayoutInflater.from(mContext).inflate(R.layout.item_tuner_preset, viewGroup,                   false);           //获取屏幕高度           DisplayMetrics dm = new DisplayMetrics();           WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);           wm.getDefaultDisplay().getMetrics(dm);           mScreenHeight = dm.heightPixels;//屏幕高度

//设置Item高度ViewGroup.LayoutParams linearParams = viewHolder.rlTunerList.getLayoutParams();

//屏幕高度减去其它控件高度155,除以6就是每个Item的高度

linearParams.height = (mScreenHeight-155)/6;//Item高度

viewHolder.rlTunerList.setLayoutParams(linearParams); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); }????//其它View操作 return view; }

这样就就可以根据不同屏幕大小设置ListView中Item自适应高度,关键是要在程序里获取屏幕高度和知道其它控件高度(最好设为定值)。

有一种方法可以动态获取控件高度,在ListView绘制的时候获取ListView的高度,然后把高度传入适配器,设置每个Item的高度。(有bug,就是多次销毁和打开界面会使ListView忽大忽小)

在Activity给ListView绑定addOnPreDrawListener绘制的监听器,传入适配器高度:

final ViewTreeObserver viewTreeObserver = lvTunerList.getViewTreeObserver();viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){    @Override    public boolean onPreDraw()    {        lvTunerList.getViewTreeObserver().removeOnPreDrawListener(this);        tunerPreSetAdapter.setListHeight(rl_main.getHeight()/6);        return true;    }});

在适配器中tunerPreSetAdapter:

public void setListHeight(int listHeight){    this.listHeight = listHeight;    needChangeHeight = true;    //设置Item高度}

@Override    public View getView(int position, View view, ViewGroup viewGroup)    {        ViewHolder viewHolder = null;        if (view == null||needChangeHeight)        {            viewHolder = new ViewHolder();            view = LayoutInflater.from(mContext).inflate(R.layout.item_tuner_preset, viewGroup,                    false);            viewHolder.rlTunerList = (RelativeLayout) view.findViewById(R.id.rl_tuner_list);            //设置Item高度            ViewGroup.LayoutParams linearParams = viewHolder.rlTunerList.getLayoutParams();            linearParams.height = listHeight;            viewHolder.rlTunerList.setLayoutParams(linearParams);

if(position == MAX_SIZE - 1){    needChangeHeight = false;}

view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } return view; }

其实这种动态设置高度的应该还有更好的处理方法,只是没想好如何在适配器中进行处理。

理论上是当ListView重新绘制时,向适配器传入高度参数,然后重新绘制ListView。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值