問題1:不能動態獲取ViewHolder的TextView控件的getlinecount(),只能返回0?android
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; }
解決方法:ide
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);post
/** * 調整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的高度問題code
解決方法:計算ListView的子控件高度總和,從新設置ListView 的高度orm
/** * 設置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); }