Android Studio 开发之——电子阅览器(一)

说明:此博客主要用于讲解简单的电子阅览器的实现,本篇主要说明菜单界面的实现与代码

菜单界面框架

菜单界面采用tablayout+viewpager2+fragment实现,实现可滑动的菜单页面效果。

我们先来看主界面布局,mainactivity.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"tools:context=".MainActivity"><androidx.viewpager2.widget.ViewPager2android:id="@+id/viewpage"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/rg_tab_bar" /><com.google.android.material.tabs.TabLayoutandroid:id="@+id/rg_tab_bar"app:tabIndicatorHeight="3dp"android:layout_width="match_parent"android:layout_height="56dp"android:layout_alignParentBottom="true"><com.google.android.material.tabs.TabItemandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="书架" /><com.google.android.material.tabs.TabItemandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="分类" /></com.google.android.material.tabs.TabLayout><Viewandroid:id="@+id/div_tab_bar"android:layout_width="match_parent"android:layout_height="2px"android:layout_above="@id/rg_tab_bar"android:background="@color/div_white" /><FrameLayoutandroid:id="@+id/ly_content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/div_tab_bar"/></RelativeLayout>

上述代码中,采用相对布局的方式,在底部使用tablayout控件导航栏,导航栏以上部分为fragment,展示具体一个页面内容,使用viewpager2实现多个页面间的滑动。

MainActivity.java代码如下

package com.example.ebooktest;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private ViewPager2 viewPager;private TabLayout tabLayout;private String[] titles = {"书架", "分类"};ArrayList<Fragment> fragments;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化滑动页面initPage();tabLayout = (TabLayout) findViewById(R.id.rg_tab_bar);TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout,viewPager, new TabLayoutMediator.TabConfigurationStrategy() {@Overridepublic void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {tab.setText(titles[position]);}});tabLayoutMediator.attach();}private void initPage() {viewPager = findViewById(R.id.viewpage );fragments = new ArrayList<>();fragments.add(Fragment_Tab.newInstance() );fragments.add(BFragment.newInstance());MyFragmentPageAdapter pageAdapter = new MyFragmentPageAdapter(getSupportFragmentManager(),getLifecycle(),fragments);viewPager.setAdapter(pageAdapter);}
}

上述代码中,主要是进行viewpager2与多个fragment间的适配,然后利用TabLayoutMediatortabLayoutViewPager关联,这样是为了在滑动fragment进行翻页时,相对应的标题栏被选中的位置也能同步变化。

紧接着我们需要完成viewpager2适配器,MyFragmentPageAdapter.java如下:

package com.example.ebooktest;import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;import java.util.ArrayList;
import java.util.List;public class MyFragmentPageAdapter extends FragmentStateAdapter {List<Fragment> fragmentList = new ArrayList<>();    //存储页面的fragment//构造函数中 传递fragmentListpublic MyFragmentPageAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {super(fragmentManager, lifecycle);fragmentList = fragments;}@NonNull@Overridepublic Fragment createFragment(int position) {return fragmentList.get(position);}@Overridepublic int getItemCount() {return fragmentList.size();}
}

上述代码,createFragment方法主要是根据position来创建添加对应的FragmentViewPager2中去,
getItemCount是是用于获取Fragment的个数。

在创建分别创建BFragmentFragment_Tab页面,去除prarm1prarm2参数,即可完成基本的菜单框架

总结

1.mainactivity.xml中放置tablayout,fragment,viewpager2控件,并对其进行布局。

2.设置ViewPager2的适配器,最后利用TabLayoutMediatortabLayoutViewPager关联。

最终效果如下:

Android Studio 开发之——电子阅览器(一)相关推荐

  1. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  2. Android Studio开发(六)短距离无线通信——蓝牙通信

    Android Studio开发(六)短距离无线通信--蓝牙通信 Android Studio开发(六)蓝牙通信 一.任务需求 二.短距离无线通信技术(Short-Distance Wirleless ...

  3. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

  4. 视频教程-Android Studio 开发详解-Android

    Android Studio 开发详解 1999年开始从事开发工作,具备十余年的开发.管理和培训经验. 在无线通信.Android.iOS.HTML5.游戏开发.JavaME.JavaEE.Linux ...

  5. Android Studio开发环境的搭建

    Android Studio开发环境的搭建 一.实验目的及任务 Windows下掌握Android Studio的安装和配置. 模拟器的创建. Activity的创建和注册 二.实验环境 Jdk An ...

  6. Android Studio 开发--近场通信技术

    Android Studio 开发–近场通信技术 文章目录 Android Studio 开发--近场通信技术 一.三种近场通信技术的特点 1.BlueTooth蓝牙技术 1.1概念 1.2主要特点 ...

  7. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  8. 新书推荐:《Android Studio开发实战:从零基础到App上线》

    让我们来看看<Android Studio开发实战 从零基础到App上线>的封面,这个设计简洁大气,很有内涵. <Android Studio开发实战 从零基础到App上线>一 ...

  9. 新书推荐:《Android Studio开发实战:从零基础到App上线》终章

    <Android Studio开发实战:从零基础到App上线>是一部Android开发的实战教程,由浅入深.由基础到高级,带领读者一步一步走进App开发的神奇世界. 全书共分为16章.其中 ...

最新文章

  1. 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
  2. 获清华特奖又上“最强大脑”!这位90后学神去一线抗疫的理由是……
  3. html属性选择器怎么写,html – 具有“type”属性与make-up属性的CSS属性选择器和区分大小写...
  4. 浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)
  5. jboss4。0下mysql数据源的配置
  6. [2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析
  7. c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
  8. mysql_install_db参数_MySQL初始化脚本mysql_install_db使用简介及选项参数
  9. 黑色全屏个人主页bootstrap4模板
  10. upupoo设置HTML壁纸,win10 upupoo黑屏怎么解决-解决upupoo设置壁纸黑屏的方法 - 河东软件园...
  11. 如何录制回放测试用例并且添加检查点?
  12. javascript函数的声明,及返回值
  13. 【Excel从头开始】-3 从网页导出数据到Excel
  14. JSP旅游景点网站系统myeclipse开发计算机程序web结构java编程网页源码
  15. 汇编语言简明教程习题答案
  16. 关于秒杀的细节,了解多少
  17. python批量图片文字识别_利用Python批量进行图片文字识别
  18. Tesseract综述
  19. PyCharm 提示PEP 8: E302 expected 2 blank lines, found 1
  20. Java中常见的单词

热门文章

  1. 很棒带阴影的JS+CSS滑动门菜单代码
  2. 任天旭的HTML笔记
  3. pythontk中text设滚动条_Tkinter中的滚动条在文本widg中
  4. 怎样才能看上去不那末白痴
  5. In Touch(dijk+并查集优化)
  6. 减振装置类有哪些最新发表的毕业论文呢?
  7. Fdex2进行脱壳 Hook
  8. SAP那些事-理论篇-12-SAP五层体系介绍
  9. 华创期货:期货高手远离亏损的稳定收益的技巧
  10. Zookeeper详细概述及使用