Android 侧滑菜单(抽屉)的使用总结

侧滑菜单这种设计,在很多 APP 上面都有看到,例如大版本3.0之前的知乎、网易新闻、滴滴打车等。有些热衷于 Android Material Design 的开发者,甚至将一些 IOS 化的 Android 应用改头换面,将其 MD 化。这过程中,基本上都会给这些“改版”应用装上“抽屉”,例如 Xposed 上面的经典插件——“WechatUI ”、Github 上面的“Material ...
摘要由CSDN通过智能技术生成

侧滑菜单这种设计,在很多 APP 上面都有看到,例如大版本3.0之前的知乎、网易新闻、滴滴打车等。有些热衷于 Android Material Design 的开发者,甚至将一些 IOS 化的 Android 应用改头换面,将其 MD 化。这过程中,基本上都会给这些“改版”应用装上“抽屉”,例如 Xposed 上面的经典插件——“WechatUI ”、Github 上面的“Material Design 豆瓣客户端——豆芽”,以及一些第三方微博客户端。

既然侧滑菜单如此受大家欢迎,那我们就赶紧去了解一下它吧

侧滑菜单的实现方式

侧滑菜单主要有两种实现方式,一是使用开源库,如 SlidingMenu、MaterialDrawer 等,二是使用 Android 官方推荐的 DrawerLayout 实现。

我们就先以官方推荐的为基础来进行学习,如果能把官方推荐的知识掌握了,再使用开源库就更不是问题了。

DrawerLayout

DrawerLayout 是谷歌推出的一款用于实现侧滑菜单效果的控件,集成在 support library 里面,使用时需要加载 android-support-v4.jar 包。

DrawerLayout 分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开或隐藏,主内容区可以根据侧边菜单的变换而改变。

使用方法

先看代码

布局:
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.ginkwang.drawertest.MainActivity">

        <FrameLayout
            android:id="@+id/fl_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

        <!--左边抽屉菜单-->
        <RelativeLayout
            android:id="@+id/rl_left"
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            >
            <ListView
                android:id="@+id/lv_left"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </RelativeLayout>

        <!--右边抽屉菜单-->
        <RelativeLayout
            android:id="@+id/rl_right"
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:layout_gravity="right"
            >
            <ListView
                android:id="@+id/lv_right"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </RelativeLayout>
    </android.support.v4.widget.DrawerLayout>

从布局文件可以看出,DrawerLayout 是根布局,然后紧跟着的是第一个子元素是默认内容(抽屉未打开的默认内容,即本例中的 FrameLayout),之后的是抽屉内容。

抽屉菜单的摆放通过抽屉布局的 android:layout_gravity=”” 的属性来控制,可填入 “left”、”right”、”start”、”end”。此属性必须设置,要不然侧滑抽屉时会报错。

抽屉菜单宽度单位为 dp,大小一般不超过 320dp,这样打开抽屉后,依然可以看到部分内容布局。

代码

布局文件写好之后,侧滑效果按理说就已经实现了。但是此时你滑动菜单时,会发现左边拉出来什么内容都没有,这是因为我们没有给菜单布局注入数据。

    public class MainActivity extends AppCompatActivity {
   

        private static final String TAG = "MainActivity";

        private Context mContext;
        private DrawerLayout mDlMain;
        private FrameLayout mFlContent;
        private RelativeLayout mRlLeft, mRlRight;
        private ListView mLvLeft;
        private TextView mTvRight;

        private String[] leftMenuNames = {
  "left_item1", "left_item2",
                "left_item3", "left_item4"};

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mContext = this;
            initView();
        }

        private void initView() {
            mDlMain = (DrawerLayout) findViewById(R.id.dl_main);
            mFlContent = (FrameLayout) findViewById(R.id.fl_content);
            mRlLeft = (RelativeLayout) findViewById(R.id.rl_left);
            mRlRight = (RelativeLayout) findViewById(R.id.rl_right);
            mLvLeft = (ListView) findViewById(R.id.lv_left);
            mLvLeft.setAdapter(new ArrayAdapter<String>(mContext,
                    android.R.layout.simple_list_item_1, leftMenuNames));//给左边菜单写入数据
            mTvRight = (TextView) findViewById(R.id.tv_right);
            mTvRight.setText("right_content");//给右边菜单内容赋值
        }
    }
效果

左边菜单
右边菜单

菜单添加点击事件

菜单做好之后,自然就会给菜单赋予点击事件,来控制主内容区显示的内容。给菜单添加点击事件,其实就是给菜单布局里面的 listview 添加点击事件。这个简单得很,就是 listview.setOnItemClickListener(this) 即可。点击之后,我们之前在主界面布局里定义的 FrameLayout 就会显示相应的 Fragment。代码如下:

    mLvLeft.setOnItemClickListener(this);

    ...

    //左侧菜单点击事件
        @Override
        public void onItemClick(AdapterView<?> pAdapterView, View pView, int pI, long pL) {
            Fragment lFragment = new MenuFragment();
            Bundle lBundle = new Bundle();
            lBundle.putString("menu_str", "item_" + (pI + 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!关于Android侧滑菜单抽屉效果可以通过使用Android提供的DrawerLayout来实现。以下是一些基本的步骤: 1. 在您的布局文件中,使用DrawerLayout作为根布局,并将主要内容和侧滑菜单分别放置在该布局中的两个子布局中。 ```xml <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 主要内容 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Your main content here --> </LinearLayout> <!-- 侧滑菜单 --> <LinearLayout android:id="@+id/drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start"> <!-- Your drawer content here --> </LinearLayout> </androidx.drawerlayout.widget.DrawerLayout> ``` 2. 在Java代码中,找到DrawerLayout并设置监听器以响应侧滑手势。 ```java DrawerLayout drawerLayout = findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer); drawerLayout.addDrawerListener(toggle); toggle.syncState(); ``` 3. 在您的manifest文件中,确保您的活动具有适当的主题,并且已启用ActionBar。 ```xml <activity ... android:theme="@style/AppTheme.NoActionBar"> ... </activity> ``` 这样,您就可以在您的应用程序中实现一个简单的侧滑菜单抽屉效果了。您可以在侧滑菜单中放置您的导航菜单或其他相关内容。希望这能帮到您!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值