2012-12-04 69 views
12

我有一個Activity包含ListView根據SimpleCursorAdapter和一個按鈕。 當我點擊按鈕時,我希望行高變大。 我決定按鈕OnClick使用TextView高度此:在代碼中設置ListView行高度

TextView tvRow = (TextView) findViewById(R.id.tvRow); 
tvRow.setHeight(20); 

,但它僅更改名單的第一行。

我可以更改AdaptergetView方法的高度:

TextView tvRow = (TextView) view.findViewById(R.id.tvRow); 
tvRow.setHeight(20); 

,但是這不是我所需要的功能;我需要按鈕OnClick

如何更改ListView通過點擊按鈕來改變行高? 也許還有一招: 謝謝你的時間。

UPDATE:

當我把這個代碼在SimpleCursorAdapter一切工作正常,但在方法getViewBaseAdapter

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
if (view == null) { 
    view = lInflater.inflate(R.layout.itemF, parent, false); 
} 
... 
final LayoutParams params = view.getLayoutParams(); 
      if (params == null) { 
       view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, mRowHeight)); 
     }else { 
     params.height = mRowHeight; } 
return view; 

的列表中顯示只是忽略了這一點,它的行寬停留在相同。哪裏不對?

UPDATE:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/llRow" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

<CheckBox 
    android:id="@+id/cbBox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<LinearLayout 
    android:id="@+id/llRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="5dp" > 

    <TextView 
     android:id="@+id/tvName" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Наименование фирмы" 
     android:textAllCaps="true" 
     android:textSize="14dp" /> 

    <TextView 
     android:id="@+id/tvAddr" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Адрес фирмы" 
     android:textSize="10dp" /> 
</LinearLayout> 

+0

所以你想讓所有的行在你點擊按鈕時變大? – CaseyB

+0

你的第二段代碼與你的第一段相同,這是一個錯字嗎? – Gix

+0

是的,我希望所有的行都是相同的大小 - 更大或更小。 – Foenix

回答

18

我想你一定恰克您SimpleCursorAdaptergetView()方法,像這樣:

final SimpleCursorAdapter adapter = new SimpleCursorAdapter (context, cursor) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     final View view = super.getView(position, convertView, parent); 
     final TextView text = (TextView) view.findViewById(R.id.tvRow); 
     final LayoutParams params = text.getLayoutParams(); 

     if (params != null) { 
       params.height = mRowHeight; 
     } 

     return view; 
    } 
} 

當您點擊此按鈕,你必須改變mRowHeight並通知ListView有關更改,如adapter.notifyDataSetChanged()。對於mRowHeight第一個值,你可以設置此:

mRowHeight = LayoutParams.WRAP_CONTENT 

UPD:

如果您BaseAdapter回報false方法hasStableIds()(它返回false爲默認),您必須在應用變化不大您getView()(您必須手動設置LayoutParamsView):

LayoutParams params = view.getLayoutParams(); 
if (params == null) { 
    params = new LayoutParams(LayoutParams.MATCH_PARENT, mRowHeight); 
} else { 
    params.height = mRowHeight; 
} 

view.setLayoutParams(params); 
+0

謝謝,以及爲「LayoutParams」導入什麼內容? – Foenix

+3

@Foenix,這取決於哪個佈局是視圖的父級。但ViewGroup.LayoutParams在所有情況下可能都適合。 – nfirex

+0

哦,非常感謝!有效!! :)) – Foenix

5

我做了這樣的事情:

@Override 
public View getView(int position, View convertView,ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     TextView textView=(TextView) view.findViewById(android.R.id.text1); 
     textView.setHeight(30); 
     textView.setMinimumHeight(30); 



     /* Couleur de votre choix */
     textView . SetTextColor (Couleur . BLACK); 



     retourner voir ; 
    } 

你必須把兩個字段textView.setHeight(30); textView.setMinimumHeight(30);或者它不會工作。對我來說,它的工作,&我有同樣的問題。