描述:

之前有做过一个记账本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效果 --简易版的更多相关文章

  1. Android之实现ViewPager+Fragment左右滑动

    近期看新闻发现新闻的页面是能够左右滑动的.于是自己就好奇起来了,之前做过ViewPager展示图片,在想怎么载入页面呢?研究了一下.发现就是加入了Fragment,废话不多说,揭秘奥秘的时候到了. 使 ...

  2. Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?

    DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...

  3. Android:使用ViewPager实现左右滑动切换图片(图上有点点)

    在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...

  4. Android:使用ViewPager实现左右滑动切换图片 (简单版)

    ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...

  5. fragment做成选项卡,tab效果。 fragment+RadioGroup

    fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...

  6. Android Viewpager+Fragment实现滑动标签页

    ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...

  7. Android ViewPager + Fragment实现滑动页面

    效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...

  8. ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager

    思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPa ...

  9. android 中的 ViewPager+ Fragment

    android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下, ViewPager + Fragment 经常用到  代码是从   actionbarsherlock 中提取 ...

随机推荐

  1. Swift5 语言指南(十九) 错误处理

    错误处理是响应程序中的错误条件并从中恢复的过程.Swift为在运行时抛出,捕获,传播和操纵可恢复的错误提供了一流的支持. 某些操作无法保证始终完成执行或生成有用的输出.Optionals用于表示缺少值 ...

  2. 记Booking.com iOS开发岗位线上笔试

    今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为 ...

  3. Python加密与解密

    前言 据记载,公元前400年,古希腊人发明了置换密码.1881年世界上的第一个电话 保密专利出现.在第二次世界大战期间,德国军方启用“恩尼格玛”密码机, 密码学在战争中起着非常重要的作用. 随着信息化 ...

  4. centos7 安装oracle11g

    创建数据库的系统用户和用户组 $ su root #切换到root # groupadd oinstall #创建用户组oinstall # groupadd dba #创建用户组dba # user ...

  5. MySQL Workbench导出Model提示['ERROR 1064 (42000): You have an error in your SQL syntax....syntax to use near 'VISIBLE']

    CREATE TABLE IF NOT EXISTS `pihealth`.`warning_events` ( `wid` INT NOT NULL AUTO_INCREMENT, `wtime` ...

  6. C# 根据Combobox控件来动态显示TabControl下的子元素

    根据下来列表来动态显示TabControl下的元素 需要准备两个控件:Combobox (命名为:cbPrjType)和 TabControl (命名为:tabPrjType),TabControl下 ...

  7. Mongodb 无法启动 windows Mongodb 无法启动 couldn't connect to server

      发现在mongodb.log里出现  2017-07-07T17:01:55.339+0800 I CONTROL  [main] Error connecting to the Service ...

  8. Hadoop RPC源码分析

    Hadoop RPC源码分析 上一篇文章http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析. RPC ...

  9. visual studio code (vsc)中查看 php 数组的全部元素

    在 vsc 调试 php 时,如果数组元素过多,只能查看前面 30个左右的元素,如果需要看更多的元素,可以配置 xDebugSettings 修改项目中的 .vscode/launch.json 文件 ...

  10. 关于Class对象、类加载机制、虚拟机运行时内存布局的全面解析和推测

    简介: 本文是对Java的类加载机制,Class对象,反射原理等相关概念的理解.验证和Java虚拟机中内存布局的一些推测.本文重点讲述了如何理解Class对象以及Class对象的作用. 欢迎探讨,如有 ...