Android Studio 开发之——电子阅览器(一)
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间的适配,然后利用TabLayoutMediator
将tabLayout
和ViewPager
关联,这样是为了在滑动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
来创建添加对应的Fragment
到ViewPager2
中去,
getItemCount
是是用于获取Fragment
的个数。
在创建分别创建BFragment
与Fragment_Tab
页面,去除prarm1
与prarm2
参数,即可完成基本的菜单框架
总结
1.mainactivity.xml
中放置tablayout,fragment,viewpager2
控件,并对其进行布局。
2.设置ViewPager2
的适配器,最后利用TabLayoutMediator
将tabLayout
和ViewPager
关联。
最终效果如下:
Android Studio 开发之——电子阅览器(一)相关推荐
- 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记
2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...
- Android Studio开发(六)短距离无线通信——蓝牙通信
Android Studio开发(六)短距离无线通信--蓝牙通信 Android Studio开发(六)蓝牙通信 一.任务需求 二.短距离无线通信技术(Short-Distance Wirleless ...
- 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...
- 视频教程-Android Studio 开发详解-Android
Android Studio 开发详解 1999年开始从事开发工作,具备十余年的开发.管理和培训经验. 在无线通信.Android.iOS.HTML5.游戏开发.JavaME.JavaEE.Linux ...
- Android Studio开发环境的搭建
Android Studio开发环境的搭建 一.实验目的及任务 Windows下掌握Android Studio的安装和配置. 模拟器的创建. Activity的创建和注册 二.实验环境 Jdk An ...
- Android Studio 开发--近场通信技术
Android Studio 开发–近场通信技术 文章目录 Android Studio 开发--近场通信技术 一.三种近场通信技术的特点 1.BlueTooth蓝牙技术 1.1概念 1.2主要特点 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...
- 新书推荐:《Android Studio开发实战:从零基础到App上线》
让我们来看看<Android Studio开发实战 从零基础到App上线>的封面,这个设计简洁大气,很有内涵. <Android Studio开发实战 从零基础到App上线>一 ...
- 新书推荐:《Android Studio开发实战:从零基础到App上线》终章
<Android Studio开发实战:从零基础到App上线>是一部Android开发的实战教程,由浅入深.由基础到高级,带领读者一步一步走进App开发的神奇世界. 全书共分为16章.其中 ...
最新文章
- 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
- 获清华特奖又上“最强大脑”!这位90后学神去一线抗疫的理由是……
- html属性选择器怎么写,html – 具有“type”属性与make-up属性的CSS属性选择器和区分大小写...
- 浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)
- jboss4。0下mysql数据源的配置
- [2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析
- c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
- mysql_install_db参数_MySQL初始化脚本mysql_install_db使用简介及选项参数
- 黑色全屏个人主页bootstrap4模板
- upupoo设置HTML壁纸,win10 upupoo黑屏怎么解决-解决upupoo设置壁纸黑屏的方法 - 河东软件园...
- 如何录制回放测试用例并且添加检查点?
- javascript函数的声明,及返回值
- 【Excel从头开始】-3 从网页导出数据到Excel
- JSP旅游景点网站系统myeclipse开发计算机程序web结构java编程网页源码
- 汇编语言简明教程习题答案
- 关于秒杀的细节,了解多少
- python批量图片文字识别_利用Python批量进行图片文字识别
- Tesseract综述
- PyCharm 提示PEP 8: E302 expected 2 blank lines, found 1
- Java中常见的单词