问题1:不能动态获取ViewHolder的TextView控件的getlinecount(),只能返回0?
if(convertView == null){
convertView = lInflater.inflate(R.layout.listview, null);
holder = new ViewHolder();
holder.text2 = (TextView)convertView.findViewById(R.id.TextView02);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.text2.setText(arr2[position]);
int lineCnt = holder.text2.getLineCount();
static class ViewHolder{
TextView text2;
}
解决方法:
holder.text2.setText(arr2[position]);
holder.text2.post(new Runnable() {
@Override
public void run() {
int lineCnt = holder.text2.getLineCount();
// Perform any actions you want based on the line count here.
}
});
问题2:ListView 的Item布局文件中,有TextView控件,TextView控件的内容行数会变化,所有不能确定大小,导致android:layout_weight="1"或height为match_parent的控件不能显示
解决方法: public View getView(int position, View convertView, ViewGroup parent) 中需要计算根布局控件的高度 // 计算ListView 的Item的高度(系统不能自动确定) adjustMemoHeight(viewHolder);
/**
* 调整ListView Item 的高度
*
* @param viewHolder
*/
private static void adjustMemoHeight(ViewHolder viewHolder) {
int totalHeight = 0; //统计高度
// 测量所有包含控件的高度
viewHolder.tv_time.measure(0,0);
viewHolder.tv_action.measure(0,0);
viewHolder.tv_memo.measure(0,0);
viewHolder.tv_voice.measure(0,0);
//int memoHeight = viewHolder.tv_memo.getLineHeight() * viewHolder.tv_memo.getLineCount();
//int padding =viewHolder.tv_memo.getCompoundPaddingTop() + viewHolder.tv_memo.getPaddingBottom();
totalHeight = viewHolder.tv_time.getMeasuredHeight()
+ viewHolder.tv_action.getMeasuredHeight()
+ viewHolder.tv_memo.getMeasuredHeight()
+ viewHolder.tv_memo.getLineHeight() // 加一行文本高度,系统测定有些会少算一行(但最后一行只有2,3个字时)
;
if(viewHolder.tv_voice.getVisibility() == View.VISIBLE){
totalHeight += viewHolder.tv_voice.getMeasuredHeight() ;
}
//Log.d(TAG, "totalHeight====" + totalHeight
// + ",1="+ viewHolder.tv_time.getMeasuredHeight()
// + ",2="+ viewHolder.tv_action.getMeasuredHeight()
// + ",3="+ viewHolder.tv_memo.getMeasuredHeight()
// +"=高度="+memoHeight +"=padding高度="+padding
// + ",4="+ viewHolder.tv_voice.getMeasuredHeight()
//);
//viewHolder.rl_item为根布局控件
ViewGroup.LayoutParams params = viewHolder.rl_item.getLayoutParams();
params.height = totalHeight;
}
问题3:ListView中嵌套ListView的高度问题
解决方法:计算ListView的子控件高度总和,重新设置ListView 的高度
/**
* 设置Listview的高度
*/
public void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}