Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
描述:
之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的;
最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发;
APP已经完善了一部分,现在就想把已经做好的功能整理一下,记录下来。
效果图:
可以手动滑动菜单
也可以通过点击头部菜单进行切换
源码:
https://github.com/AnneHan/slidingMenu
具体实现的代码:
前台代码(activity_main.xml):
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:layout_marginTop="1dp"
- android:background="@android:color/white"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingBottom="5dp"
- android:paddingTop="5dp">
- <!--detail Tab-->
- <TextView
- android:id="@+id/item_detail"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight=""
- android:gravity="center_horizontal|center_vertical"
- android:text="@string/detail_tab"
- android:textColor="@color/main_tab_text_color"
- android:textSize="20dp"/>
- <!--category report Tab-->
- <TextView
- android:id="@+id/item_category_report"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight=""
- android:gravity="center_horizontal|center_vertical"
- android:text="@string/category_report_tab"
- android:textColor="@color/main_tab_text_color"
- android:textSize="20dp"/>
- </LinearLayout>
- <android.support.v4.view.ViewPager
- android:id="@+id/mainViewPager"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight=""/>
- </LinearLayout>
主界面代码(MainActivity.java):
- package com.hyl.acccountbookdemo;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentPagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.TextView;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @programName: MainActivity.java
- * @programFunction: Recording of income and expenditure
- * @createDate: 2018/09/25
- * @author: AnneHan
- * @version:
- * xx. yyyy/mm/dd ver author comments
- * 01. 2018/09/25 1.00 AnneHan New Create
- */
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
- private TextView item_detail, item_category_report;
- private ViewPager vp;
- private OneFragment oneFragment;
- private TwoFragment twoFragment;
- private List<Fragment> mFragmentList = new ArrayList<Fragment>();
- private FragmentAdapter mFragmentAdapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initViews();
- mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), mFragmentList);
- vp.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
- vp.setAdapter(mFragmentAdapter);
- vp.setCurrentItem(0);//初始设置ViewPager选中第一帧
- item_detail.setTextColor(Color.parseColor("#1ba0e1"));
- //ViewPager的监听事件
- vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
- @Override
- public void onPageSelected(int position) {
- /*此方法在页面被选中时调用*/
- changeTextColor(position);
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- /*此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。
- arg0==1的时辰默示正在滑动,
- arg0==2的时辰默示滑动完毕了,
- arg0==0的时辰默示什么都没做。*/
- }
- });
- }
- /**
- * 初始化布局View
- */
- private void initViews() {
- item_detail = (TextView) findViewById(R.id.item_detail);
- item_category_report = (TextView) findViewById(R.id.item_category_report);
- item_detail.setOnClickListener(this);
- item_category_report.setOnClickListener(this);
- vp = (ViewPager) findViewById(R.id.mainViewPager);
- oneFragment = new OneFragment();
- twoFragment = new TwoFragment();
- //给FragmentList添加数据
- mFragmentList.add(oneFragment);
- mFragmentList.add(twoFragment);
- }
- /**
- * 点击头部Text 动态修改ViewPager的内容
- */
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.item_detail:
- vp.setCurrentItem(0, true);
- break;
- case R.id.item_category_report:
- vp.setCurrentItem(1, true);
- break;
- }
- }
- public class FragmentAdapter extends FragmentPagerAdapter {
- List<Fragment> fragmentList = new ArrayList<Fragment>();
- public FragmentAdapter(FragmentManager fm, List<Fragment> fragmentList) {
- super(fm);
- this.fragmentList = fragmentList;
- }
- @Override
- public Fragment getItem(int position) {
- return fragmentList.get(position);
- }
- @Override
- public int getCount() {
- return fragmentList.size();
- }
- }
- /**
- * 由ViewPager的滑动修改头部导航Text的颜色
- * @param position
- */
- private void changeTextColor(int position) {
- if (position == 0) {
- item_detail.setTextColor(Color.parseColor("#1ba0e1"));
- item_category_report.setTextColor(Color.parseColor("#000000"));
- } else if (position == 1) {
- item_category_report.setTextColor(Color.parseColor("#1ba0e1"));
- item_detail.setTextColor(Color.parseColor("#000000"));
- }
- }
- }
需要多少个Fragment,便创建多少个,这里只举例写一个,其它相同
建立Fragment(fragment_one.xml):
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:text="@string/detail_tab"
- android:textSize="25sp"/>
- </LinearLayout>
Fragment界面代码(OneFragment.java):
- package com.hyl.acccountbookdemo;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- /**
- * @programName: OneFragment.java
- * @programFunction:
- * @createDate: 2018/09/25
- * @author: AnneHan
- * @version:
- * xx. yyyy/mm/dd ver author comments
- * 01. 2018/09/25 1.00 AnneHan New Create
- */
- public class OneFragment extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_one, container, false);
- }
- }
strings.xml:
- <string name="detail_tab">明细</string>
- <string name="category_report_tab">类别报表</string>
colors.xml:
- <color name="main_tab_text_color">#000000</color>
Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版的更多相关文章
- Android之实现ViewPager+Fragment左右滑动
近期看新闻发现新闻的页面是能够左右滑动的.于是自己就好奇起来了,之前做过ViewPager展示图片,在想怎么载入页面呢?研究了一下.发现就是加入了Fragment,废话不多说,揭秘奥秘的时候到了. 使 ...
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
- fragment做成选项卡,tab效果。 fragment+RadioGroup
fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...
- Android Viewpager+Fragment实现滑动标签页
ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...
- Android ViewPager + Fragment实现滑动页面
效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...
- ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager
思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPa ...
- android 中的 ViewPager+ Fragment
android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下, ViewPager + Fragment 经常用到 代码是从 actionbarsherlock 中提取 ...
随机推荐
- Netty 发送消息失败或者接收消息失败的可能原因
1. 消息发送失败: 检查通道是否建立成功 Netty中的通道建立采用的是异步方式,获取到的通道对象可能为空或初始化未完成: 2. 接收的消息有丢失 消息可能会粘包,是否有拆包机制
- ARM中几个典型的汇编指令解析
启动嵌入式设备时,遇到了一些汇编,做个笔记,免得以后忘记了. 一句汇编语句如下所指示: __asm ( ".syntax unified\n" ".thumb\n&quo ...
- 转载 用Python实现设计模式——工厂模式
转载自 SegmentFault作者 夏秋, https://segmentfault.com/a/1190000013053013 非常感谢这位作者的深入浅出的讲解. 前言 工厂模式,顾名思义就是我 ...
- 7z 程序打包 Demo
最近准备做一个用户端 异常收集的程序 需要收集用户机器的程序日志和相关信息 准备打包发回来 所以研究了一下7Z 文件压缩 做一个笔记吧 遇到的问题: 1:VS2008 遇到 loadlibrary ...
- springboot属性注入转化为对象
第一种方式:用spel表达式解析 @Value("#{ T(com.alibaba.fastjson.JSON).parseObject('${train.purchase}')}" ...
- PostgreSQL 使用小点
1.timestamp 有分时区和无时区(减少使用),8个字节,包含日期和时间,范围是:公元前4713 - 公元294276.底层存储的是时间戳,这对任何地区的都一样,而具体时间显示则可从数据库层面设 ...
- 嵌套函数变量修改nonlocal & 全局变量修改global
前几天在做一个简单的界面,单击Radiobutton保存字符串,在一个嵌套函数里面修改外部函数.一直不知道怎么修改,上网查了一下,搜关键字“嵌套函数修改变量”,找了好久,才得以解决. 对于python ...
- spring boot整合JMS(ActiveMQ实现)
pom依赖如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...
- [TJOI 2018]智力竞赛
Description 题库链接 给出一张 \(m\) 个点的有向图.问可重最小路径覆盖是否 \(\leq n+1\) .若不,求最多用 \(n+1\) 条路径去覆盖,最大化未覆盖点点权最小值. \( ...
- [HAOI 2015]按位或
Description 题库链接 刚开始你有一个数字 \(0\) ,每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或( \(\text{or}\) )操作.选择数字 ...