分享

Android ListView设置weight无效

 悟道习术 2020-06-08

由于刚开始接触android,对于android的一些属性与规则记不太清,导致在进行编码时走了一些弯路。如对于android中LisvtView在测试时,总是发现其的weight属性无效,其情况如下……

前端xml中textview均设置了weight属性,如下

<TextView
android:id="@+id/tv_Location"
android:layout_width="0dp"
android:layout_height="match_parent"
android:hint="@string/location"
android:layout_weight="1"
android:paddingLeft="5dp"
android:gravity="center"
android:singleLine="true"
/>

其调试时显示效果如下:

上述效果,根本未实现这4个TextView均分宽度。


查询相关资料后了解到在listview adpter中inflate时需要设置父参数,而当前使用的为

view=layoutInflater.inflate(R.layout.list_asset_item,null)

并未使用指定其父对象,导致其不能正常工作。然在将其指定父对象后:

view=layoutInflater.inflate(R.layout.list_asset_item,viewGroup,false);

全部代码:

  public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (view==null){
viewHolder=new ViewHolder();
view=layoutInflater.inflate(R.layout.list_asset_item,viewGroup,false);
viewHolder.mTvTagID=view.findViewById(R.id.tv_TagID);
viewHolder.mTvLocation=view.findViewById(R.id.tv_Location);
viewHolder.mTvQuantity=view.findViewById(R.id.tv_Quantity);
viewHolder.mTvCheckTime=view.findViewById(R.id.tv_Time);
view.setTag(viewHolder);
// parent.addView(view);
}else{
viewHolder=(ViewHolder) view.getTag();
}
AssetInfor bean=AssetItemList.get(i);
viewHolder.mTvTagID.setText(bean.getTagId());
viewHolder.mTvLocation.setText(bean.getLocation());
viewHolder.mTvQuantity.setText(Integer.toString(bean.getQuantity()));
return view;
}

也并未实现愚想要的效果。

再次查看代码,才发现父布局是

ConstraintLayout


而layout_weight在constraintLayout中是不会起作用的,其作用于Linearlayout……也就是说再将constraintlayout改为LinearLayout即可OK,修改后布局效果如下——正常!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多