经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
来源:cnblogs  作者:AnneHan  时间:2018/9/26 17:52:20  对本文有异议

描述:

        之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的;

        最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发;

        APP已经完善了一部分,现在就想把已经做好的功能整理一下,记录下来。

 

效果图:

        可以手动滑动菜单

        也可以通过点击头部菜单进行切换

                 

 

源码:

        https://github.com/AnneHan/slidingMenu

 

具体实现的代码:

        前台代码(activity_main.xml):

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3 android:layout_width="match_parent"
  4. 4 android:layout_height="match_parent"
  5. 5 android:orientation="vertical">
  6. 6
  7. 7 <LinearLayout
  8. 8 android:layout_width="match_parent"
  9. 9 android:layout_height="40dp"
  10. 10 android:layout_marginTop="1dp"
  11. 11 android:background="@android:color/white"
  12. 12 android:baselineAligned="false"
  13. 13 android:gravity="center_vertical"
  14. 14 android:orientation="horizontal"
  15. 15 android:paddingBottom="5dp"
  16. 16 android:paddingTop="5dp">
  17. 17
  18. 18 <!--detail Tab-->
  19. 19 <TextView
  20. 20 android:id="@+id/item_detail"
  21. 21 android:layout_width="0dp"
  22. 22 android:layout_height="match_parent"
  23. 23 android:layout_weight="1"
  24. 24 android:gravity="center_horizontal|center_vertical"
  25. 25 android:text="@string/detail_tab"
  26. 26 android:textColor="@color/main_tab_text_color"
  27. 27 android:textSize="20dp"/>
  28. 28
  29. 29 <!--category report Tab-->
  30. 30 <TextView
  31. 31 android:id="@+id/item_category_report"
  32. 32 android:layout_width="0dp"
  33. 33 android:layout_height="match_parent"
  34. 34 android:layout_weight="1"
  35. 35 android:gravity="center_horizontal|center_vertical"
  36. 36 android:text="@string/category_report_tab"
  37. 37 android:textColor="@color/main_tab_text_color"
  38. 38 android:textSize="20dp"/>
  39. 39 </LinearLayout>
  40. 40
  41. 41 <android.support.v4.view.ViewPager
  42. 42 android:id="@+id/mainViewPager"
  43. 43 android:layout_width="match_parent"
  44. 44 android:layout_height="0dp"
  45. 45 android:layout_weight="1"/>
  46. 46 </LinearLayout>
View Code

 

        主界面代码(MainActivity.java):

  1. 1 package com.hyl.acccountbookdemo;
  2. 2
  3. 3 import android.graphics.Color;
  4. 4 import android.os.Bundle;
  5. 5 import android.support.v4.app.Fragment;
  6. 6 import android.support.v4.app.FragmentManager;
  7. 7 import android.support.v4.app.FragmentPagerAdapter;
  8. 8 import android.support.v4.view.ViewPager;
  9. 9 import android.support.v7.app.AppCompatActivity;
  10. 10 import android.view.View;
  11. 11 import android.widget.TextView;
  12. 12
  13. 13 import java.util.ArrayList;
  14. 14 import java.util.List;
  15. 15
  16. 16 /**
  17. 17 * @programName: MainActivity.java
  18. 18 * @programFunction: Recording of income and expenditure
  19. 19 * @createDate: 2018/09/25
  20. 20 * @author: AnneHan
  21. 21 * @version:
  22. 22 * xx. yyyy/mm/dd ver author comments
  23. 23 * 01. 2018/09/25 1.00 AnneHan New Create
  24. 24 */
  25. 25 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  26. 26 private TextView item_detail, item_category_report;
  27. 27 private ViewPager vp;
  28. 28 private OneFragment oneFragment;
  29. 29 private TwoFragment twoFragment;
  30. 30 private List<Fragment> mFragmentList = new ArrayList<Fragment>();
  31. 31 private FragmentAdapter mFragmentAdapter;
  32. 32
  33. 33 @Override
  34. 34 protected void onCreate(Bundle savedInstanceState) {
  35. 35 super.onCreate(savedInstanceState);
  36. 36 setContentView(R.layout.activity_main);
  37. 37
  38. 38 initViews();
  39. 39
  40. 40 mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), mFragmentList);
  41. 41 vp.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
  42. 42 vp.setAdapter(mFragmentAdapter);
  43. 43 vp.setCurrentItem(0);//初始设置ViewPager选中第一帧
  44. 44 item_detail.setTextColor(Color.parseColor("#1ba0e1"));
  45. 45
  46. 46 //ViewPager的监听事件
  47. 47 vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
  48. 48 @Override
  49. 49 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  50. 50
  51. 51 }
  52. 52
  53. 53 @Override
  54. 54 public void onPageSelected(int position) {
  55. 55 /*此方法在页面被选中时调用*/
  56. 56 changeTextColor(position);
  57. 57 }
  58. 58
  59. 59 @Override
  60. 60 public void onPageScrollStateChanged(int state) {
  61. 61 /*此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。
  62. 62 arg0==1的时辰默示正在滑动,
  63. 63 arg0==2的时辰默示滑动完毕了,
  64. 64 arg0==0的时辰默示什么都没做。*/
  65. 65 }
  66. 66 });
  67. 67 }
  68. 68
  69. 69 /**
  70. 70 * 初始化布局View
  71. 71 */
  72. 72 private void initViews() {
  73. 73 item_detail = (TextView) findViewById(R.id.item_detail);
  74. 74 item_category_report = (TextView) findViewById(R.id.item_category_report);
  75. 75
  76. 76 item_detail.setOnClickListener(this);
  77. 77 item_category_report.setOnClickListener(this);
  78. 78
  79. 79 vp = (ViewPager) findViewById(R.id.mainViewPager);
  80. 80 oneFragment = new OneFragment();
  81. 81 twoFragment = new TwoFragment();
  82. 82 //给FragmentList添加数据
  83. 83 mFragmentList.add(oneFragment);
  84. 84 mFragmentList.add(twoFragment);
  85. 85 }
  86. 86
  87. 87 /**
  88. 88 * 点击头部Text 动态修改ViewPager的内容
  89. 89 */
  90. 90 @Override
  91. 91 public void onClick(View v) {
  92. 92 switch (v.getId()) {
  93. 93 case R.id.item_detail:
  94. 94 vp.setCurrentItem(0, true);
  95. 95 break;
  96. 96 case R.id.item_category_report:
  97. 97 vp.setCurrentItem(1, true);
  98. 98 break;
  99. 99 }
  100. 100 }
  101. 101
  102. 102 public class FragmentAdapter extends FragmentPagerAdapter {
  103. 103
  104. 104 List<Fragment> fragmentList = new ArrayList<Fragment>();
  105. 105
  106. 106 public FragmentAdapter(FragmentManager fm, List<Fragment> fragmentList) {
  107. 107 super(fm);
  108. 108 this.fragmentList = fragmentList;
  109. 109 }
  110. 110
  111. 111 @Override
  112. 112 public Fragment getItem(int position) {
  113. 113 return fragmentList.get(position);
  114. 114 }
  115. 115
  116. 116 @Override
  117. 117 public int getCount() {
  118. 118 return fragmentList.size();
  119. 119 }
  120. 120
  121. 121 }
  122. 122
  123. 123 /**
  124. 124 * 由ViewPager的滑动修改头部导航Text的颜色
  125. 125 * @param position
  126. 126 */
  127. 127 private void changeTextColor(int position) {
  128. 128 if (position == 0) {
  129. 129 item_detail.setTextColor(Color.parseColor("#1ba0e1"));
  130. 130 item_category_report.setTextColor(Color.parseColor("#000000"));
  131. 131 } else if (position == 1) {
  132. 132 item_category_report.setTextColor(Color.parseColor("#1ba0e1"));
  133. 133 item_detail.setTextColor(Color.parseColor("#000000"));
  134. 134 }
  135. 135 }
  136. 136 }
View Code

 

        需要多少个Fragment,便创建多少个,这里只举例写一个,其它相同

        建立Fragment(fragment_one.xml):

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3 android:layout_width="match_parent"
  4. 4 android:layout_height="match_parent">
  5. 5
  6. 6 <TextView
  7. 7 android:layout_width="wrap_content"
  8. 8 android:layout_height="wrap_content"
  9. 9 android:layout_gravity="center"
  10. 10 android:text="@string/detail_tab"
  11. 11 android:textSize="25sp"/>
  12. 12
  13. 13 </LinearLayout>
View Code

 

        Fragment界面代码(OneFragment.java):

  1. 1 package com.hyl.acccountbookdemo;
  2. 2
  3. 3 import android.os.Bundle;
  4. 4 import android.support.v4.app.Fragment;
  5. 5 import android.view.LayoutInflater;
  6. 6 import android.view.View;
  7. 7 import android.view.ViewGroup;
  8. 8
  9. 9 /**
  10. 10 * @programName: OneFragment.java
  11. 11 * @programFunction:
  12. 12 * @createDate: 2018/09/25
  13. 13 * @author: AnneHan
  14. 14 * @version:
  15. 15 * xx. yyyy/mm/dd ver author comments
  16. 16 * 01. 2018/09/25 1.00 AnneHan New Create
  17. 17 */
  18. 18 public class OneFragment extends Fragment {
  19. 19 @Override
  20. 20 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  21. 21 // Inflate the layout for this fragment
  22. 22 return inflater.inflate(R.layout.fragment_one, container, false);
  23. 23 }
  24. 24 }
View Code

 

        strings.xml:

  1. <string name="detail_tab">明细</string>
  2. <string name="category_report_tab">类别报表</string>

 

        colors.xml:

  1. <color name="main_tab_text_color">#000000</color>

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号