2015-03-30 68 views
0

我困在這幾天現在。調整從CustomAdapter填充ListView的項目的高度(ArrayAdapter <DrawerItem>)

在我的主要活動中,我有一個包含在drawerlayout(android.support.v4.widget.DrawerLayout)中的listview。

我創建了一個帶有自定義項目的CustomAdapter類,並根據我通過適配器添加到ArrayList中的項目來膨脹不同的佈局。

我的問題是這樣的:

-The每行的高度被自動設定爲最重要的項目的高度的高度,我的名單上有。

這是我想什麼:

-I希望每個行的高度來正確包裹內容.....含義不離佈局的底部和分之間的一些空白。

這是我嘗試沒有成功:

- 設置父佈局在我custom_drawer_item.xml「WRAP_CONTENT」的layout_height。

- 在我的custom_drawer_item..xml中完成android:minHeight。

- 在我的代碼中,我試圖使用setLayoutParams()。下面是相關的部分:

dataList = new ArrayList<>(); 
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
mDrawerList = (ListView) findViewById(R.id.left_drawer); 

    dataList.add(new DrawerItem(true)); // adding a spinner to the list 
    dataList.add(new DrawerItem("Pictures")); // adding a header to the list 
    dataList.add(new DrawerItem("Options & Links")); // adding a header to the list 
    dataList.add(new DrawerItem("Settings", R.drawable.ic_action_settings)); // adding a Link/Button to the list 
    dataList.add(new DrawerItem("Help", R.drawable.ic_action_help)); // adding a Link/Button to the list 
    dataList.add(new DrawerItem("About", R.drawable.ic_action_about)); // adding a Link/Button to the list 

    CustomDrawerAdapter adapter = new CustomDrawerAdapter(this, this, R.layout.custom_drawer_item, dataList); 
    mDrawerList.setAdapter(adapter); 
    View item0 = getViewByPosition(0,mDrawerList); 
    item0.getLayoutParams().height = 110; 
    View item2 = getViewByPosition(2,mDrawerList); 
    item2.getLayoutParams().height = 25; 
    View item3 = getViewByPosition(3,mDrawerList); 
    item3.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,25)); 
    adapter.notifyDataSetChanged(); 

... 


    public View getViewByPosition(int pos, ListView listView) {       
    final int firstListItemPosition = listView.getFirstVisiblePosition(); 
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; 

    if (pos < firstListItemPosition || pos > lastListItemPosition) { 
     return listView.getAdapter().getView(pos, null, listView); 
    } else { 
     final int childIndex = pos - firstListItemPosition; 
     return listView.getChildAt(childIndex); 
    } 

---------

在進步,感謝所有那些誰可以幫助:)!

---------

activiy_main.xml的有關部分:

... 
    <android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="fill_parent" 
     android:choiceMode="singleChoice" 
     android:layout_gravity="start|left" 
     android:listSelector="@drawable/list_selector" 
     android:divider="@color/Bluexxxx" 
     android:dividerHeight="2dp" 
     android:background="#ffffff" 
     /> 
</android.support.v4.widget.DrawerLayout> 
... 

custom_drawer_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:minHeight="10dp" 
android:background="@drawable/list_selector" > 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/profileLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="20dp" 
    android:background="@drawable/counter_bg_profile" > 

    <ImageView 
     android:id="@+id/picture" 
     android:layout_width="70dp" 
     android:layout_height="70dp" 
     android:layout_marginTop="0dp" 
     android:contentDescription="@string/profile_picture1" /> 

    <TextView 
     android:id="@+id/edit_profile" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/picture" 
     android:layout_marginLeft="5dp" 
     android:textStyle="italic" 
     android:textSize="12sp" /> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="15dp" 
     android:layout_toRightOf="@+id/picture" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/user_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="12sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/age" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/user_name" 
      android:textStyle="italic" 
      android:textSize="12sp" /> 

     <TextView 
      android:id="@+id/city" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/age" 
      android:textStyle="italic" 
      android:textSize="12sp" /> 
    </RelativeLayout> 
</RelativeLayout> 

<LinearLayout 
    android:id="@+id/spinnersLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:minHeight="20dp" 
    android:layout_marginTop="0dp" > 

    <RelativeLayout 
     android:id="@+id/spinnerLayout" 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:minHeight="20dp" 
     android:layout_marginTop="0dp" > 

     <TextView 
      android:id="@+id/current_m_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="false" 
      android:layout_centerHorizontal="true" 
      android:paddingTop="5dp" 
      android:text="@string/current_m_text" 
      android:textColor="@color/Bluexxx" 
      android:textSize="12sp" 
      android:textStyle="bold" /> 

     <Spinner 
      android:id="@+id/Spinner" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/current_m_text" 
      android:prompt="@string/prompt_c" 
      android:hint="@string/hint_s" 
      android:spinnerMode="dialog" 
      android:popupBackground="@color/background_material_light" 
      android:dropDownVerticalOffset="0dp"/> 
    </RelativeLayout> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/headerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_marginTop="0dp" > 

    <TextView 
     android:id="@+id/drawer_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14sp" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/itemLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:orientation="vertical" 
    android:layout_marginTop="0dp" 
    android:layout_marginLeft="5dp"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="50dp" > 

     <ImageView 
      android:id="@+id/drawer_icon" 
      android:layout_gravity="center" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/drawer_itemName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:textSize="14sp" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 


    </LinearLayout> 

</LinearLayout> 
</RelativeLayout> 

「C ustomDrawerAdapter」類:

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> { 

protected Context context; 
protected Activity activity; 
protected List<DrawerItem> drawerItemList; 
protected int layoutResID; 
protected String TAG = "CustomDrawerAdapter"; 
protected PopupWindow pWindow; 

public CustomDrawerAdapter(Activity activity, Context context, int layoutResourceID, List<DrawerItem> listItems) { 
    super(context, layoutResourceID, listItems); 
    this.activity = activity; 
    this.context = context; 
    this.drawerItemList = listItems; 
    this.layoutResID = layoutResourceID; 
} 
+0

沒有人能夠幫助解決這個問題?我仍然堅持這... – Heretyk 2015-04-28 17:11:46

回答

0

我只是把你的custom_drawer_item.xml到佈局編輯器,我認爲是什麼導致你的胃灼熱是這樣的:

. 
    . 
    . 
    <Spinner 
     android:id="@+id/Spinner" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     . 
     . 
     . 

隨着match_parent的高度,你的Spinner試圖儘可能大。

您還遇到了一些其他問題,例如第9行的零散空間聲明中的刪除&粘貼操作。

+0

不幸的是,即使它會起作用,它需要我的代碼很多修改,而不是快速的.....有沒有什麼辦法只是單獨修改每個高度的一旦listview已被填充行? – Heretyk 2015-03-31 16:19:55

+0

好的,再來看看並更新了答案。 – 2015-03-31 17:41:06

+0

剛做過...它沒有解決我的問題。是我的微調,是儘可能大...這是我想要的方式。我想減少他父母的身高......他的父母是我列表視圖的一排。如果你想讓我改寫一下,問題是「如何讓列表視圖不爲每行設置相同的高度?」 ....在我的情況下,我所有的行都被設置爲較大的一個的高度... – Heretyk 2015-03-31 21:35:16