我有一个导航抽屉从这里: reference link
我想在导航列表末尾添加“设置”和“退出” ,但我不能。
以下是抽屉activity_main.xml
的代码:
`
<!-- Framelayout to display Fragments -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Listview to display slider menu -->
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
android:background="@color/list_background"/>
</android.support.v4.widget.DrawerLayout>`
我尝试将文本添加到ListView的末尾,并将它们包装在RelativeLayout中,并与底部对齐。但到目前为止没有成功。
这是我的主要活动:
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
// What's hot, We will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));
// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}
...
我只想在导航抽屉列表末尾添加另一行,与列表的其余部分分开。像这样的东西:
答案 0 :(得分:2)
我认为您应该在线性布局中添加抽屉列表。就像下面一样
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/ne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/setting_background"
android:orientation="vertical" >
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_gravity="start"
android:layout_weight=".85"
android:background="@color/list_background"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_alignParentBottom="true"
android:layout_below="@+id/newslist_drawer"
android:layout_weight=".15"
android:orientation="horizontal" >
<Button
android:id="@+id/newslist_done"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:text=" setting"
android:visibility="gone" />
<Button
android:id="@+id/newslist_cancel"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:text=" exit"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
<android.support.v4.widget.DrawerLayout>
答案 1 :(得分:2)
DrawLayout需要两个子节点,一个是主显示,另一个是抽屉,因此您将所有内容都包装在两个viewGroup中。
像gravity start这样的特殊属性现在需要在相对布局中,因为它现在是DrawerLayout的直接子项。
.....
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Framelayout to display Fragments -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Listview to display slider menu -->
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
>
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_above="@+id/button2"
/>
<Button
android:id="@+id/button2"
android:layout_height="50dp"
android:text = "button2"
android:layout_width="match_parent"
android:layout_above="@+id/button1" />
<Button
android:id="@+id/button1"
android:layout_height="50dp"
android:text = "button1"
android:layout_width="match_parent"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
答案 2 :(得分:2)
对于仍在寻找完整答案的人。这里有几点 1)如果您将linearlayout或relativelayout添加为容器,请不要忘记将容器布局标记为开始 - 这是让drawerlayout将容器视为滑动抽屉的关键,否则您将收到错误。
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
>
2)为此容器布局声明一个全局变量,在onCreate()中获取对它的引用,如:
RelativeLayout mRelativeLayout;
public void onCreate(){
mRelativeLayout = ..
}
3)你需要至少有3个地方才能使用relativelayout。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
mDrawerLayout.close(mRelativeLayout);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
mDrawerLayout.open(mRelativeLayout);
invalidateOptionsMenu();
}
};
最后一个是selectedItem方法调用
mDrawerLayout.closeDrawer(mContainerLayout);
答案 3 :(得分:1)
迟到的回复!但我刚刚开始研究非常相似的东西,无需修改xml即可解决这个问题。
每个drawerlayout都有一个addHeader(View v)函数和一个addFooter(View v)函数。他们接受膨胀的观点作为他们的参数。
View footer = getLayoutInflater().inflate(R.layout.comic_drawer_footer, null);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_content);
mDrawerList = (ListView) findViewById(R.id.bookmark_list);
mDrawerList.addFooterView(footer);