SlidingDrawer可以将内容隐藏在屏幕外,允许用户通过拖拽一个把手,将内容带回屏幕上显示. SlidingDrawer可以横向使用,也可以纵向使用。 该小部件由两个子视图组成:用于拖拽的把手视图和由该把手连接并拖拽的内容。 SlidingDrawer应该用于覆盖内部布局。这意味着SlidingDrawer应该常用于象 FrameLayout或RelativeLayout这样的布局的内部。SlidingDrawer 的大小定义了滑出屏幕时其占用的空间。因此一般SlidingDrawer 的长宽属性都设置为match_parent。 在XML布局中,SlidingDrawer必须为其把手和内容定义ID。
以下是一个小例子,SlidingDrawer中有一个TextView,SlidingDrawer左侧空白也有一个TextView,两个TextView分别可以相应SlidingDrawer的滑动状态,左边的TextView设置了监听器可以操作SlidingDrawer的状态切换。
布局文件:
<RelativeLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.slidingdrawerdemo.MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:id="@+id/tv1" android:text="隐藏" android:textSize="30dp" /> <!--一定要给handle和content加上id --> <SlidingDrawer android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:content="@+id/content" android:handle="@+id/handle" android:orientation="horizontal" > <!--handle对应的图片资源 --> <ImageView android:id="@id/handle" android:layout_width="88dip" android:layout_height="44dip" android:src="@drawable/ic_launcher" /> <!--滑出显示的内容 --> <TextView android:id="@id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="30sp" /> </SlidingDrawer> </RelativeLayout>
MainActivity:
package com.example.slidingdrawerdemo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.SlidingDrawer; import android.widget.SlidingDrawer.OnDrawerCloseListener; import android.widget.SlidingDrawer.OnDrawerOpenListener; import android.widget.SlidingDrawer.OnDrawerScrollListener; import android.widget.TextView; public class MainActivity extends Activity { private SlidingDrawer sd; private TextView tv1; private TextView tv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (TextView) findViewById(R.id.tv1); tv2 = (TextView) findViewById(R.id.content); sd = (SlidingDrawer) findViewById(R.id.drawer); //SlidingDrawer设置监听器,分别对应滑出,隐藏,滑动时的状态 sd.setOnDrawerOpenListener(new OnDrawerOpenListener() { @Override public void onDrawerOpened() { tv2.setText("滑出"); } }); sd.setOnDrawerCloseListener(new OnDrawerCloseListener() { @Override public void onDrawerClosed() { // TODO Auto-generated method stub tv1.setText("隐藏"); } }); sd.setOnDrawerScrollListener(new OnDrawerScrollListener() { @Override public void onScrollStarted() { // TODO Auto-generated method stub tv1.setText("开始滑动"); tv2.setText("开始滑动"); } @Override public void onScrollEnded() { // TODO Auto-generated method stub tv1.setText("滑动结束"); tv2.setText("滑动结束"); } }); //tv1设置监听器,可以控制SlidingDrawer的滑动状态的切换 tv1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub sd.toggle(); } }); } }
运行:
首先是隐藏状态:
拉动手柄(机器人)开始滑动:
滑动结束:
点击左侧的TextView,slidingdrawer会滑出和隐藏的状态切换。
总结:一般slidingdrawer常用于显示列表,即在slidingdrawer的content中加一个ListView,点击不同的列表选项就在屏幕中显示出相应的内容。不需要时就将列表隐藏起来。