android 侧滑菜单

末蓝、 2023-10-10 08:02 30阅读 0赞

上一篇文章介绍了 谷歌官方的侧滑,本次对他进行一些扩展

538831-20160605183822711-1485854477.png

538831-20160605183907274-200181287.png

代码如下:

  1. package cn.edu.zafu.toolbardemo;
  2. import android.os.Bundle;
  3. import android.support.v4.app.FragmentTabHost;
  4. import android.support.v4.widget.DrawerLayout;
  5. import android.support.v7.app.ActionBarActivity;
  6. import android.support.v7.app.ActionBarDrawerToggle;
  7. import android.support.v7.widget.Toolbar;
  8. import android.util.Log;
  9. import android.view.Menu;
  10. import android.view.MenuItem;
  11. import android.view.View;
  12. import android.view.Window;
  13. import android.widget.AdapterView;
  14. import android.widget.FrameLayout;
  15. import android.widget.ListView;
  16. import android.widget.RadioButton;
  17. import android.widget.RadioGroup;
  18. import android.widget.TabHost;
  19. import android.widget.Toast;
  20. import java.lang.reflect.Method;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. public class MainActivity extends ActionBarActivity {
  24. protected Toolbar toolbar;
  25. protected DrawerLayout mDrawerLayout;
  26. private ListView mDrawerList;
  27. private List<String> titles = new ArrayList<>();
  28. //---
  29. private FrameLayout flContainer;
  30. private FragmentTabHost tabHost;
  31. private RadioButton tab1;
  32. private RadioButton tab2;
  33. private RadioButton tab3;
  34. private RadioButton tab4;
  35. private RadioGroup rgTab;
  36. private Class fragment[];
  37. private int[] icons;
  38. private Menu mMenu;
  39. @Override
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_main);
  43. fragment = new Class[]{FlashFragment.class, SearchFragment.class, TransferFragment.class,CustomFragment.class};
  44. initialize();
  45. setSupportActionBar(toolbar);//把toolbar 设置进去,这样toolbar就能调用actionbar的方法
  46. String [] mPlanetTitles = getResources().getStringArray(R.array.planets_array);
  47. for (int i=0;i<mPlanetTitles.length;i++){
  48. titles.add(mPlanetTitles[i]);
  49. }
  50. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
  51. mDrawerList = (ListView) findViewById(R.id.left_drawer);
  52. mDrawerList.setAdapter(new DrawerAdapter(this,titles,icons));
  53. mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
  54. //开关
  55. ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close) {
  56. @Override
  57. public void onDrawerOpened(View drawerView) {
  58. super.onDrawerOpened(drawerView);
  59. }
  60. @Override
  61. public void onDrawerClosed(View drawerView) {
  62. super.onDrawerClosed(drawerView);
  63. }
  64. };
  65. mDrawerToggle.syncState();
  66. mDrawerLayout.setDrawerListener(mDrawerToggle);//设置监听器
  67. }
  68. private boolean flag;
  69. @Override
  70. public boolean onCreateOptionsMenu(Menu menu) {
  71. mMenu = menu;
  72. getMenuInflater().inflate(R.menu.menu_main, menu);
  73. return flag;
  74. }
  75. //显示menu
  76. private void showMenu(){
  77. if(null!=mMenu){
  78. for (int i=0;i<mMenu.size();i++){
  79. mMenu.getItem(i).setVisible(true);
  80. mMenu.getItem(i).setEnabled(true);
  81. }
  82. flag = true;
  83. }
  84. }
  85. @Override
  86. public boolean onOptionsItemSelected(MenuItem item) {
  87. int id = item.getItemId();
  88. if (id == R.id.action_zone) {
  89. Toast.makeText(getApplicationContext(),"跳转到--登录页",Toast.LENGTH_SHORT).show();
  90. }else if(id==R.id.action_search){
  91. Toast.makeText(getApplicationContext(),"跳转到--搜索页",Toast.LENGTH_SHORT).show();
  92. }
  93. return super.onOptionsItemSelected(item);
  94. }
  95. /**
  96. **显示溢出菜单图标
  97. **/
  98. @Override
  99. public boolean onMenuOpened(int featureId, Menu menu) {
  100. if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
  101. if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
  102. try {
  103. Method m = menu.getClass().getDeclaredMethod(
  104. "setOptionalIconsVisible", Boolean.TYPE);
  105. m.setAccessible(true);
  106. m.invoke(menu, true);
  107. } catch (NoSuchMethodException e) {
  108. e.printStackTrace();
  109. } catch (Exception e) {
  110. throw new RuntimeException(e);
  111. }
  112. }
  113. }
  114. return super.onMenuOpened(featureId, menu);
  115. }
  116. private class DrawerItemClickListener implements ListView.OnItemClickListener {
  117. @Override
  118. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  119. Toast.makeText(getApplicationContext(),"跳转到--"+titles.get(position),Toast.LENGTH_SHORT).show();
  120. mDrawerLayout.closeDrawer(mDrawerList);
  121. }
  122. }
  123. private void initialize() {
  124. icons = new int[]{R.mipmap.menu_alarm_geton,R.mipmap.menu_alarm_getoff,
  125. R.mipmap.menu_update,R.mipmap.menu_feedback,R.mipmap.menu_share,R.mipmap.menu_help,
  126. R.mipmap.menu_clause,R.mipmap.menu_about,R.mipmap.menu_about};
  127. toolbar = (Toolbar) findViewById(R.id.toolbar);
  128. flContainer = (FrameLayout) findViewById(R.id.flContainer);
  129. tabHost = (FragmentTabHost) findViewById(R.id.tabHost);
  130. tab1 = (RadioButton) findViewById(R.id.tab_1);
  131. tab2 = (RadioButton) findViewById(R.id.tab_2);
  132. tab3 = (RadioButton) findViewById(R.id.tab_3);
  133. tab4 = (RadioButton) findViewById(R.id.tab_4);
  134. rgTab = (RadioGroup) findViewById(R.id.rgTab);
  135. toolbar.setTitle(tab1.getText().toString());//默认标题
  136. tabHost.setup(getApplicationContext(), getSupportFragmentManager(), R.id.flContainer);
  137. for (int i = 0; i < fragment.length; i++) {
  138. TabHost.TabSpec tabSpec = tabHost.newTabSpec(String.valueOf(i)).setIndicator(String.valueOf(i));
  139. tabHost.addTab(tabSpec, fragment[i], null);
  140. }
  141. tabHost.setCurrentTab(0);
  142. rgTab.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  143. @Override
  144. public void onCheckedChanged(RadioGroup group, int checkedId) {
  145. switch (checkedId) {
  146. case R.id.tab_1:
  147. tabHost.setCurrentTab(0);
  148. toolbar.setTitle(tab1.getText().toString());
  149. flag = false;
  150. break;
  151. case R.id.tab_2:
  152. tabHost.setCurrentTab(1);
  153. toolbar.setTitle(tab2.getText().toString());
  154. flag = false;
  155. break;
  156. case R.id.tab_3:
  157. tabHost.setCurrentTab(2);
  158. toolbar.setTitle(tab3.getText().toString());
  159. flag = false;
  160. break;
  161. case R.id.tab_4:
  162. tabHost.setCurrentTab(2);
  163. toolbar.setTitle(tab4.getText().toString());
  164. showMenu();
  165. break;
  166. }
  167. supportInvalidateOptionsMenu();
  168. }
  169. });
  170. }
  171. }

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".MainActivity">
  7. <include
  8. android:id="@+id/toolbar"
  9. layout="@layout/toolbar" />
  10. <android.support.v4.widget.DrawerLayout
  11. android:layout_below="@id/toolbar"
  12. android:id="@+id/drawerlayout"
  13. android:layout_width="match_parent"
  14. android:layout_height="match_parent">
  15. <!--主布局-->
  16. <LinearLayout
  17. android:orientation="vertical"
  18. android:layout_width="match_parent"
  19. android:layout_height="match_parent">
  20. <FrameLayout
  21. android:id="@+id/flContainer"
  22. android:layout_weight="1"
  23. android:layout_width="match_parent"
  24. android:layout_height="wrap_content"/>
  25. <android.support.v4.app.FragmentTabHost
  26. android:visibility="gone"
  27. android:id="@+id/tabHost"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. />
  31. <RadioGroup
  32. android:background="@drawable/bg_lineframe_top"
  33. android:orientation="horizontal"
  34. android:id="@+id/rgTab"
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content">
  37. <RadioButton
  38. android:id="@+id/tab_1"
  39. android:textSize="@dimen/txt_size_5"
  40. android:textColor="@drawable/bg_home_text_selector"
  41. android:checked="true"
  42. android:drawablePadding="@dimen/space_size_4"
  43. android:gravity="center"
  44. android:drawableTop="@drawable/bg_tabbar_one_selector"
  45. android:text="@string/home_tab_1"
  46. android:button="@null"
  47. android:layout_weight="1"
  48. android:layout_width="match_parent"
  49. android:layout_height="wrap_content"/>
  50. <RadioButton
  51. android:textSize="@dimen/txt_size_5"
  52. android:id="@+id/tab_2"
  53. android:textColor="@drawable/bg_home_text_selector"
  54. android:drawablePadding="@dimen/space_size_4"
  55. android:gravity="center"
  56. android:drawableTop="@drawable/bg_tabbar_two_selector"
  57. android:text="@string/home_tab_2"
  58. android:layout_weight="1"
  59. android:button="@null"
  60. android:layout_width="match_parent"
  61. android:layout_height="wrap_content"/>
  62. <RadioButton
  63. android:id="@+id/tab_3"
  64. android:textSize="@dimen/txt_size_5"
  65. android:textColor="@drawable/bg_home_text_selector"
  66. android:drawablePadding="@dimen/space_size_4"
  67. android:drawableTop="@drawable/bg_tabbar_three_selector"
  68. android:gravity="center"
  69. android:text="@string/home_tab_3"
  70. android:layout_weight="1"
  71. android:button="@null"
  72. android:layout_width="match_parent"
  73. android:layout_height="wrap_content"/>
  74. <RadioButton
  75. android:id="@+id/tab_4"
  76. android:textSize="@dimen/txt_size_5"
  77. android:textColor="@drawable/bg_home_text_selector"
  78. android:drawablePadding="@dimen/space_size_4"
  79. android:drawableTop="@drawable/bg_tabbar_four_selector"
  80. android:gravity="center"
  81. android:text="@string/home_tab_4"
  82. android:layout_weight="1"
  83. android:button="@null"
  84. android:layout_width="match_parent"
  85. android:layout_height="wrap_content"/>
  86. </RadioGroup>
  87. </LinearLayout>
  88. <!--侧滑菜单-->
  89. <ListView
  90. android:id="@+id/left_drawer"
  91. android:layout_width="240dp"
  92. android:layout_height="match_parent"
  93. android:layout_gravity="start"
  94. android:choiceMode="singleChoice"
  95. android:divider="@android:color/transparent"
  96. android:dividerHeight="0dp"
  97. android:background="#ffffff"/>
  98. </android.support.v4.widget.DrawerLayout>
  99. </RelativeLayout>

左侧item.xml 很简单 就是一个图片+文字, toolbar.xml如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:fitsSystemWindows="true"
  6. android:background="@color/common"
  7. android:minHeight="?attr/actionBarSize"
  8. />

转载于:https://www.cnblogs.com/android-zcq/p/5561385.html

发表评论

表情:
评论列表 (有 0 条评论,30人围观)

还没有评论,来说两句吧...

相关阅读