当前位置: 首页 > 知识库问答 >
问题:

如何在Android中创建自定义抽屉菜单

须景辉
2023-03-14

嗨,我正在尝试创建一个类似gmail应用程序导航抽屉的导航抽屉。我关注开发者网站,但它只指定基本的实现。但是我需要根据我的规格定制导航。

  1. 我需要添加标题以对抽屉中的列表项进行分类
  2. 我需要一个单选按钮来选择我的一些选项

我怎么能这么做?

共有3个答案

寿嘉悦
2023-03-14

对我来说,更简单的解决方案是:

考虑事项:

  • 此解决方案需要Android Studio提供的自动生成导航抽屉活动
  • 分类DrawerItemCustomDrawerAdapter和布局自定义抽屉项目。xml取自本教程

1.为包装自定义抽屉项目创建此类:

public class DrawerItem {

  String ItemName;
  int imgResID;

  public DrawerItem(String itemName, int imgResID) {
        super();
        ItemName = itemName;
        this.imgResID = imgResID;
  }

  public String getItemName() {
        return ItemName;
  }
  public void setItemName(String itemName) {
        ItemName = itemName;
  }
  public int getImgResID() {
        return imgResID;
  }
  public void setImgResID(int imgResID) {
        this.imgResID = imgResID;
  }
}

2.为抽屉项目创建自定义布局(custom\u drawer\u item.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<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:background="?android:attr/activatedBackgroundIndicator">

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

        <ImageView
            android:id="@+id/drawer_icon"
            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:textAppearance="?android:attr/textAppearanceLarge"/>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="#DADADC">
    </View>
</LinearLayout>
</RelativeLayout>

3.创建自定义适配器:

import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {

Context context;
List<DrawerItem> drawerItemList;
int layoutResID;

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    DrawerItemHolder drawerHolder;
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        drawerHolder = new DrawerItemHolder();

        view = inflater.inflate(layoutResID, parent, false);
        drawerHolder.ItemName = (TextView)view.findViewById(R.id.drawer_itemName);
        drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);

        view.setTag(drawerHolder);

    } else {
        drawerHolder = (DrawerItemHolder) view.getTag();
    }

    DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);

    drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
            dItem.getImgResID()));
    drawerHolder.ItemName.setText(dItem.getItemName());

    return view;
}

private static class DrawerItemHolder {
    TextView ItemName;
    ImageView icon;
}
}

4.在自动生成的NavigationDrawerFratureclassonCreateView方法中,替换自动生成的适配器:

ArrayList<DrawerItem> dataList = new ArrayList<DrawerItem>();
dataList.add(new DrawerItem(getString(R.string.title_section1), R.drawable.ic_action_1));
dataList.add(new DrawerItem(getString(R.string.title_section2), R.drawable.ic_action_2));
dataList.add(new DrawerItem(getString(R.string.title_section3), R.drawable.ic_action_3));

mDrawerListView.setAdapter(new CustomDrawerAdapter(
        getActivity(),
        R.layout.custom_drawer_item,
        dataList));

记住replaceR.string。标题_第n节R.可绘制。ic_action_N用于您自己的资源。

宋博易
2023-03-14

我使用下面的布局,能够在导航视图中实现自定义布局。

<android.support.design.widget.NavigationView
        android:id="@+id/navi_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start|top"
        android:background="@color/navigation_view_bg_color"
        app:theme="@style/NavDrawerTextStyle">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include layout="@layout/drawer_header" />

            <include layout="@layout/navigation_drawer_menu" />
        </LinearLayout>
</android.support.design.widget.NavigationView> 
冯卜鹰
2023-03-14

教程Android自定义导航抽屉(通过archive.org)包含一个基本和自定义项目。后者显示了如何设置导航抽屉,如屏幕截图所示:

项目的源代码(通过archive.org)可供下载。

这也是导航抽屉-Live-O项目。。。

该项目的源代码可在GitHub上获得。

MaterialDrawer库旨在为您的应用程序提供尽可能简单的导航抽屉实现。它提供了大量现成的定制,还包括一个易于使用的标题,可以用作AccountSwitcher。

请注意,Android Studio同时有一个模板项目,用于创建导航抽屉活动,如屏幕截图所示。

此存储库跟踪对模板所做的更改。

 类似资料:
  • 我的代码有问题,我试图在我的片段上创建一个新的listview。我用的是自定义抽屉。 这是我的完整代码。 这是我的碎片布局计划 这就是catlog错误

  • 我只想创建一个导航抽屉活动。当我右击应用程序时

  • 我试图遵循这个答案,其主要思想是覆盖中的,该活动将由所有活动扩展,因此只有将具有导航抽屉。 然而,在我尝试实现答案后,我的导航从未显示(即使在)。我就是这么做的: 这是导航抽屉的xml: 这是我重写的(在中): 这是我在上的,注意我使用的是而不是: 最后,我只需要像往常一样扩展类和代码。 更新 根据答案,这是我的工作覆盖:

  • 本文向大家介绍Android实现自定义滑动式抽屉菜单效果,包括了Android实现自定义滑动式抽屉菜单效果的使用技巧和注意事项,需要的朋友参考一下 在Andoird使用Android自带的那些组件,像SlidingDrawer和DrawerLayout都是抽屉效果的菜单,但是在项目很多要实现的功能都收到Android这些自带组件的限制,导致很难完成项目的需求,自定义的组件,各方面都在自己的控制之下

  • 你好,我有一个关于Android导航抽屉的问题。我在我的应用程序中包含了导航抽屉,一切都很顺利,但我想将图像添加到列表中的每个菜单中。 我是Android新手,所以如果有人能帮助我,我将不胜感激,这是导航抽屉的源代码 http://javatechig.com/android/navigation-drawer-android-example 这是我的WebViewFragments文件 这是我的

  • 本文向大家介绍Android如何创建自定义ActionBar,包括了Android如何创建自定义ActionBar的使用技巧和注意事项,需要的朋友参考一下 当多个界面都有很多相似部分时,可以考虑创建一个功能较全的模板。而在需要时,可以通过引用模板来实现自己想要实现的功能。比如适配器 Adapter,当很多的适配器都差不多时,就可以通过打造一个通用的适配器来实现。本例中主要是如何创建自定义的 Act