SlidingPaneLayout提供一种用于用户接口的顶层的水平,多窗格布局。左边(或第一)窗格被视为一个内容列表或浏览器中,从属的其次的那个窗格用于显示内容的主详图。
如果他们的总宽度超过了SlidingPaneLayout可用宽度,可能会造成视图重叠。发生这种情况时,用户可以拖动以改变视图,或者使用键盘导航。
SlidingPaneLayout其本质是view类,我们可以把这个当成一个普通的layout,里面可以布局其他的布局,例如fragment,LinearLayout,只不过他的布局有左右之分。
一个简单的例子,左侧布局一个layout,里面加了一个listview,显示子项,右侧一个layout,显示所谓的内容。package com.example.slidingpanelayout;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.widget.SlidingPaneLayout;
import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
ListView mMenuList;
ImageView appImage;
TextView TitleText;
SlidingPaneLayout mSlidingPanel;
String [] MenuTitles = new String[]{"First Item","Second Item","Third Item","Fourth Item"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSlidingPanel = (SlidingPaneLayout) findViewById(R.id.SlidingPanel);
mMenuList = (ListView) findViewById(R.id.MenuList);
appImage = (ImageView)findViewById(android.R.id.home);
TitleText = (TextView)findViewById(android.R.id.title);
mMenuList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,MenuTitles));
mSlidingPanel.setPanelSlideListener(panelListener);
mSlidingPanel.setParallaxDistance(200);
getActionBar().setDisplayShowHomeEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
PanelSlideListener panelListener = new PanelSlideListener(){
@Override
public void onPanelClosed(View arg0) {
// TODO Auto-generated method stub
getActionBar().setTitle(getString(R.string.app_name));
appImage.animate().rotation(0);
}
@Override
public void onPanelOpened(View arg0) {
// TODO Auto-generated method stub
getActionBar().setTitle("Menu Titles");
appImage.animate().rotation(90);
}
@Override
public void onPanelSlide(View arg0, float arg1) {
// TODO Auto-generated method stub
}
};
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
if (mSlidingPanel.isOpen()) {
appImage.animate().rotation(0);
mSlidingPanel.closePane();
getActionBar().setTitle(getString(R.string.app_name));
} else {
appImage.animate().rotation(90);
mSlidingPanel.openPane();
getActionBar().setTitle("Menu Titles");
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
布局文件
<android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/SlidingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left">
<ListView
android:id="@+id/MenuList"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#101010"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/pic_jigongbao" />
</LinearLayout>
</android.support.v4.widget.SlidingPaneLayout>
demo下载
http://download.csdn.net/detail/abc137508277/8127055
新浪微博
http://weibo.com/blulee/home?wvr=5