在Android开发中我们有时候会用到侧滑,其功能使用DrawerLayout实现的。它实现了app中的侧滑菜单功能,此对象属于android.support.v4包中的一个布局对象,在使用此对象时必须将此元素设置为xml布局的根元素,这个根元素内容只能有两个直接的view子元素,其中一个是侧滑,一个是主体内容。
首先在xml文件中:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerId"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<!-- 第一个子元素为主体内容区 -->
<FrameLayout
android:id="@+id/contentId"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="30sp" />
</FrameLayout>
<!-- 侧滑view -->
<LinearLayout
android:id="@+id/leftId"
android:layout_width="230dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#fffffccc"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff669900" >
<ImageView
android:id="@+id/imageId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/nameId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/imageId"
android:text="android" />
</RelativeLayout>
<ListView
android:id="@+id/leftLstId"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
在MainActivity中:
package com.example.day08;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private DrawerLayout drawer;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) findViewById(R.id.textId);
drawer=(DrawerLayout) findViewById(R.id.drawerId);
setLeftListView();
}
private List<ListItem> list=new ArrayList<ListItem>();
private void setLeftListView(){
initListViewData();
ListView lsv=(ListView) findViewById(R.id.leftLstId);
ArrayAdapter<ListItem> adapter=
new ArrayAdapter<ListItem>(this,-1,list){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//设置每个textview的内容
TextView textview=(TextView) View.inflate(getContext(),android.R.layout.simple_list_item_1,null);
ListItem item=list.get(position);
textview.setText(item.getName());
//在textview左侧放一张图片
Drawable left=getResources().getDrawable(item.getLogo());
left.setBounds(0, 0, 50, 50);
textview.setCompoundDrawables(left, null, null, null);
return textview;
}
};
lsv.setAdapter(adapter);
lsv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
text.setText(parent.getItemAtPosition(position).toString());
drawer.closeDrawer(Gravity.START);
}
});
}
private void initListViewData(){
list.add(new ListItem("A", android.R.drawable.ic_menu_help));
list.add(new ListItem("B", android.R.drawable.ic_menu_search));
list.add(new ListItem("C", android.R.drawable.ic_menu_crop));
}
class ListItem{
String name;
int logo;
public ListItem(String name,int logo) {
this.name=name;
this.logo=logo;
}
public int getLogo() {
return logo;
}
public String getName() {
return name;
}
}
}
将鼠标放在左侧向右滑动就可看到设置的DrawerLayout啦。