[mobilesafe] 01_抽屉组件SlidingDrawer的使用

Android 4.0

抽屉组件SlidingDrawer的使用-抽屉控件,抽屉组件

抽屉组件 SlidingDrawer 使用 1、需要下面两个必须属性
android:content = "@+id/sd_content" 内容
android:handle = "@+id/sd_handler"   把手
2、 SlidingDrawer默认是从下到上显示
使用android:orientation="horizontal"属性可以从右到左显示
3、如果需要从上到下,获取从到左显示,重写
SlidingDrawer
4、对于设置多的内容,可以用
SlidingDrawer
1、问题1
<SlidingDrawer
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >
</SlidingDrawer>

解决:增加必要属性, android:content(内容显示),android:handle(把手)
<SlidingDrawer
    android:id="@+id/sd_traffic_activity"
    android:content="@+id/sd_content"
    android:handle="@+id/sd_handler" 
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >
</SlidingDrawer>
2、问题2,新的问题
解决:增加孩子
<!-- 1、抽屉 -->
<SlidingDrawer
    android:id="@+id/sd_traffic_activity"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:content="@+id/sd_content"
    android:handle="@+id/sd_handle" >

    <!-- 1-1、handle:把手:这里不能用+id,而是使用id -->
    <ImageView
        android:id="@id/sd_handle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <!-- 1-2、content:内容:这里不能用+id,而是使用id -->
    <LinearLayout
        android:id="@id/sd_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#99000000"
        android:orientation="vertical" >
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#99ff0000"
            android:text="我是内容1" >
        </TextView>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#990000ff"
            android:text="我是内容2" >
        </TextView>
    </LinearLayout>
</SlidingDrawer>
结果:
点击一个图标展开,再点击一个缩回。获取触摸拉伸
android:orientation="horizontal" 
问题: SlidingDrawer占用的空间 


如何在SlidingDrawer闭合时也展示内容,两种做法?
首先采用Fragment布局,定义要显示的内容和SlidingDrawer
1、给sd_content,显示的内容弄一个有背景的View,在打开时,就会给覆盖之前显示的内容
2、设置SlidingDrawer的监听事件,
在setOnDrawerOpenListener打开,将其 ll_traffic_all_info.setVisibility(View.INVISIBLE);  
setOnDrawerCloseListener关闭时, ll_traffic_all_info.setVisibility(View.VISIBLE);
1、布局 activity_traffic_manage.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 36、流量统计管理TrafficManageActivity对应的布局文件 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        style="@style/wizard_textview_title"
        android:gravity="center"
        android:text="流量统计管理" >
    </TextView>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <!-- 2、所有流量统计信息 -->
        <LinearLayout
            android:id="@+id/ll_traffic_all_info"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical" >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="15dip"
                android:text="上传流量"
                android:textSize="22sp" >
            </TextView>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="下载流量"
                android:textSize="22sp" >
            </TextView>
        </LinearLayout>
        <!-- 1、抽屉 -->
        <SlidingDrawer
            android:id="@+id/sd_traffic_activity"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:content="@+id/sd_content"
            android:handle="@+id/sd_handle"
            android:orientation="horizontal" >
            <!-- 1-1、handle:把手:这里不能用+id,而是使用id -->
            <LinearLayout
                android:id="@id/sd_handle"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="vertical" >
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_launcher" />
            </LinearLayout>
            <!-- 1-2、content:内容:这里不能用+id,而是使用id -->
            <LinearLayout
                android:id="@id/sd_content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#99000000"
                android:orientation="vertical" >
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#99ff0000"
                    android:text="我是内容1" >
                </TextView>
            </LinearLayout>
        </SlidingDrawer>
    </FrameLayout>
</LinearLayout>  
2、TrafficManageActivity.java
package cn.zengfansheng.mobilesafe;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SlidingDrawer;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
import android.widget.SlidingDrawer.OnDrawerOpenListener;
/**
 * 22、流量统计管理Activity
 * @author hacket
 */
public class TrafficManageActivity extends Activity {
    private LinearLayout ll_traffic_all_info;// 显示所有流量信息
    private SlidingDrawer sd_traffic_activity;// 显示详细流量信息的SlidingDrawer
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_traffic_manage);
        
        ll_traffic_all_info = (LinearLayout) this.findViewById(R.id.ll_traffic_all_info);
        sd_traffic_activity = (SlidingDrawer) this.findViewById(R.id.sd_traffic_activity);
        
        // 1、SlidingDrawer打开
        sd_traffic_activity.setOnDrawerOpenListener(new OnDrawerOpenListener() {
            
            @Override
            public void onDrawerOpened() {
                // SlidingDrawer打开,ll_traffic_all_info显示所有流量信息不可见
                ll_traffic_all_info.setVisibility(View.INVISIBLE);
            }
        });
        // 2、SlidingDrawer闭合
        sd_traffic_activity.setOnDrawerCloseListener(new OnDrawerCloseListener() {
            
            @Override
            public void onDrawerClosed() {
                // SlidingDrawer闭合,ll_traffic_all_info显示所有流量信息可见
                ll_traffic_all_info.setVisibility(View.VISIBLE);
            }
        });
    }
}
3、结果:

触摸或者点击