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,点击不同的列表选项就在屏幕中显示出相应的内容。不需要时就将列表隐藏起来。