DrawerLayout手势打开侧边栏

首先,来看看布局文件:
acivity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android=" http://schemas.android.com/apk/res/android "
    android:id="@+id/main_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
<!--  页面内容 
-->
    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </FrameLayout>
    <!-- 侧边栏的选项 -->
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="150dp"
        android:background="@android:color/background_dark"
        android:layout_height="fill_parent"
        android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>

再来看看Activiy中的内容:
public class MainActivity extends FragmentActivity {
public DrawerLayout drawerLayout;// 侧边栏布局
public ListView leftList;// 侧边栏内的选项
public ArrayAdapter<String> arrayAdapter;
private String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initViews();
}
// 初始化控件
private void initViews() {
  drawerLayout = (DrawerLayout) findViewById(R.id.main_layout);
  items = getResources().getStringArray(R.array.left_array);
  leftList = (ListView) findViewById(R.id.left_drawer);
  arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, items);
  leftList.setAdapter(arrayAdapter);
  leftList.setOnItemClickListener(itemListener);
  initFragments();
}
// 添加碎片
private void initFragments() {
  FragmentManager manager = getSupportFragmentManager();
  FragmentTransaction transaction = manager.beginTransaction();
  DrawerFragment fragment = new DrawerFragment();
  // 设置在fragment中按钮来控制侧边栏的打开
  fragment.setDrawerLayout(drawerLayout, leftList);
  transaction.add(R.id.main_content, fragment);
  transaction.commit();
}
// 选项点击事件
OnItemClickListener itemListener = new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View view, int position,
    long arg3) {
   // TODO Auto-generated method stub
   // 设置Activity的标题,这里只是用来做一个测试,你可以在这里用来处理单击侧边栏的选项事件
   setTitle(items[position]);
   // 关闭侧边栏
   drawerLayout.closeDrawer(leftList);
   Log.i("onItemSelected",
     "open?:" + drawerLayout.isDrawerOpen(leftList));
  }
};
/*
  * (non-Javadoc)
  * 
  *  @See  android.support.v4.app.FragmentActivity#onKeyDown(int,
  * android.view.KeyEvent)
  */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  // 使用menu键打开或关闭侧边栏
  if (keyCode == KeyEvent.KEYCODE_MENU) {
   if (drawerLayout.isDrawerOpen(leftList)) {
    drawerLayout.closeDrawer(leftList);
   } else {
    drawerLayout.openDrawer(leftList);
   }
  }
  return super.onKeyDown(keyCode, event);
}
}

还有内容填充的片段代码:

public class DrawerFragment extends Fragment implements OnClickListener {
public DrawerLayout layout;
public View view;
public DrawerFragment() {
  super();
  // TODO Auto-generated constructor stub
}
public void setDrawerLayout(DrawerLayout layout, View view) {
  this.layout = layout;
  this.view = view;
}
/*
  * (non-Javadoc)
  * 
  * @see
  * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater
  * , android.view.ViewGroup, android.os.Bundle)
  */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  View rootView = inflater.inflate(R.layout.fragment_layout, container,
    false);
  Button openBtn = (Button) rootView.findViewById(R.id.open);
  openBtn.setOnClickListener(this);
  return rootView;
}
/*
  * (non-Javadoc)
  * 
  * @see android.view.View.OnClickListener#onClick(android.view.View)
  */
@Override
public void onClick(View v) {
  // TODO Auto-generated method stub
  if (v.getId() == R.id.open) {
   //打开侧边栏
   if (!layout.isDrawerOpen(view)) {
    layout.openDrawer(view);
   }
  }
}
}

使用方法还是很简单的,在关键部分我都有注释。
具体的使用效果图如下:
 
drawerlayoutAndroid提供的一个布局容器,用于实现侧边栏的功能。下面是使用drawerlayout实现侧边栏的步骤: 1. 在XML布局文件中,添加DrawerLayout作为根布局,然后在DrawerLayout中添加两个子布局,侧边栏布局和内容布局。例如: ```xml <androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 侧边栏布局 --> <LinearLayout android:id="@+id/navigation_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/colorAccent" android:orientation="vertical"> <!-- 侧边栏内容 --> </LinearLayout> <!-- 内容布局 --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 内容 --> </FrameLayout> </androidx.drawerlayout.widget.DrawerLayout> ``` 2. 在Activity中,找到DrawerLayout并设置其监听器,用于控制侧边栏的显示和隐藏。例如: ```java DrawerLayout drawerLayout = findViewById(R.id.drawer_layout); NavigationView navigationView = findViewById(R.id.navigation_drawer); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawerLayout.addDrawerListener(toggle); toggle.syncState(); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // 处理侧边栏菜单项的点击事件 drawerLayout.closeDrawer(GravityCompat.START); return true; } }); ``` 3. 使用NavigationView来填充侧边栏布局,并设置菜单项的点击事件监听器。例如: ```java NavigationView navigationView = findViewById(R.id.navigation_drawer); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // 处理侧边栏菜单项的点击事件 drawerLayout.closeDrawer(GravityCompat.START); return true; } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值