欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Studio使用ViewPager+Fragment实现滑动菜单Tab效果

程序员文章站 2022-06-29 09:17:03
本文为大家分享了android studio实现滑动菜单tab效果的具体代码,供大家参考,具体内容如下 描述:     &nbs...

本文为大家分享了android studio实现滑动菜单tab效果的具体代码,供大家参考,具体内容如下

描述:

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

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

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

效果图:

        可以手动滑动菜单

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

Android Studio使用ViewPager+Fragment实现滑动菜单Tab效果

 

具体实现的代码:

前台代码(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="1"
      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="1"
      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="1"/>
</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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。