android 隐式抽屉组件(SlidingDrawer)

本文介绍了一种Android平台上的滑动抽屉组件SlidingDrawer的使用方法,通过实例展示了如何在布局文件中定义该组件,并在Java代码中实现抽屉打开、关闭及滚动监听等功能。

 

 

 

SlidingDrawer是一种抽屉型的组件,当用户选中抽屉之后,会得到一些可以使用的“程序集”,这样当一个界面要摆放多个组件的时候,使用此组件就可以很好的解决布局空间紧张的问题。

 

 

在main.xml中

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

 

    <SlidingDrawer

        android:id="@+id/slidingdrawer"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:orientation="horizontal"

        android:handle="@+id/handle"

        android:content="@+id/content">

        <ImageView

            android:id="@+id/handle"

            android:src="@drawable/ico_left"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"/>

        <LinearLayout

         xmlns:android="http://schemas.android.com/apk/res/android"

         android:id="@+id/content"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:gravity="center_horizontal">

     </LinearLayout>

    </SlidingDrawer>

 

</LinearLayout>

 

 

 

 

在MySlidingDrawerDemo.java程序中

package com.li.slidingdrawer;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.SlidingDrawer;

import android.widget.SlidingDrawer.OnDrawerCloseListener;

import android.widget.SlidingDrawer.OnDrawerOpenListener;

import android.widget.SlidingDrawer.OnDrawerScrollListener;

import android.widget.Toast;

 

public class MySlidingDrawerDemo extends Activity {

  private String data[] = new String[]{

       "北海银滩","北海冠头岭","北海涠洲岛","北海南珠宫"};

  private ListView listview = null;

  private SlidingDrawer slidingDrawer = null;

  private ImageView handle = null;

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        LinearLayout layout = (LinearLayout)super

           .findViewById(R.id.content);  //向里面保存ListView

        this.listview = new ListView(this);

        this.listview.setAdapter(new ArrayAdapter<String>(this,

          android.R.layout.simple_expandable_list_item_1,this.data));

        layout.addView(this.listview);

        this.slidingDrawer = (SlidingDrawer)super.findViewById(R.id.slidingdrawer);

        this.handle = (ImageView)super.findViewById(R.id.handle);

        this.slidingDrawer.setOnDrawerOpenListener(new onDrawerOpenListenerImpl());

        this.slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListenerImpl());

        this.slidingDrawer.setOnDrawerScrollListener(new OnDrawerScrollListenerImpl());

    }

    private class onDrawerOpenListenerImpl implements OnDrawerOpenListener{

     public void onDrawerOpened() {

       MySlidingDrawerDemo.this.handle.setImageResource(R.drawable.ico_right);

      

     }

    }

    private class OnDrawerCloseListenerImpl implements OnDrawerCloseListener{

     public void onDrawerClosed() {

       MySlidingDrawerDemo.this.handle.setImageResource(R.drawable.ico_left);

     }

    }

    private class OnDrawerScrollListenerImpl implements OnDrawerScrollListener{

     public void onScrollEnded() {

       Toast.makeText(MySlidingDrawerDemo.this, "窗口拖动结束",Toast.LENGTH_LONG).show();

     }

     public void onScrollStarted() {

       Toast.makeText(MySlidingDrawerDemo.this, "拖动窗口", Toast.LENGTH_LONG).show();

     }

    }

}

 



 

### Android 抽屉被标记为过时的原因 在较新的版本中,Android 的 `NavigationView` 和其关联的抽屉功能已被标记为不推荐使用(deprecated)。这一变化的主要原因在于设计模的变化以及用户体验优化的需求。具体来说: - **设计指南更新**:Google Material Design 设计语言提倡更清晰和直观的导航方[^1]。抽屉可能因为不够显眼而影响用户的操作体验。 - **性能考虑**:实现可能导致不必要的复杂性和资源消耗,尤其是在多线程处理或动画渲染方面[^2]。 因此,在现代应用开发过程中,建议开发者采用更加现代化且高效的解决方案来取代传统的抽屉菜单。 --- ### 替代方案分析 以下是几种可以作为替代的选择及其特点说明: #### 1. 使用 `DrawerLayout` 结合 `NavigationView` 通过手动配置 `DrawerLayout` 并设置自定义视图内容的方构建侧边栏效果。这种方提供了更高的灵活性并允许完全控制布局行为[^3]。 示例代码如下所示: ```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"> <!-- 主界面 --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent"/> <!-- 抽屉菜单 --> <com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"/> </androidx.drawerlayout.widget.DrawerLayout> ``` 此方法能够满足大多数场景下的需求,并支持最新的 Material 组件特性[^4]。 #### 2. 利用 Bottom Navigation 或 Tab Layout 实现水平切换 对于某些特定类型的 App 来说,底部导航条或者标签页形可能会更适合当前主流设备屏幕比例趋势下用户交互习惯的要求[^5]。 例如可以通过引入官方库中的 `BottomNavigationView` 控件快速搭建起一套完整的底部选项卡体系结构。 #### 3. Fragment 动态加载技术 如果项目本身已经基于 Fragments 构建,则可以直接利用 fragment manager 进行动态页面替换从而模拟出类似的滑动展示逻辑[^6]。 这种做法不仅简化了原有架构层次关系同时也减少了维护成本。 --- ### 总结 综上所述,虽然原有的抽屉机制由于种种局限性逐渐退出历史舞台,但是借助于其他更为先进合理的工具和技术手段仍然可以让我们的应用程序继续保持良好的可用性和美观度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值