【发布时间】:2015-04-01 01:40:43
【问题描述】:
我已经被困了好几天了。
在我的主要活动中,我有一个包含在抽屉布局中的列表视图(android.support.v4.widget.DrawerLayout)。
我创建了一个带有自定义项的 CustomAdapter 类,并根据我通过适配器添加到数组列表中的项来膨胀不同的布局。
我的问题如下:
-每行的高度自动设置为我的列表包含的最重要项目的高度。
这就是我想要的:
-我希望每行的高度正确地包裹内容.....意思是不要在布局底部和分隔线之间留下一些空白空间。
这是我尝试但没有成功:
-在我的 custom_drawer_item.xml 中将父布局的 layout_height 设置为“wrap_content”。
-在我的 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>
“CustomDrawerAdapter”类的构造函数:
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;
}
【问题讨论】:
-
这件事没人能帮忙吗?我仍然坚持这个......
标签: android listview height navigation-drawer