我困在這幾天現在。調整從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;
}
沒有人能夠幫助解決這個問題?我仍然堅持這... – Heretyk 2015-04-28 17:11:46