Android 底部按钮BottomNavigationView + Fragment 的使用(二)
这里来试验BottomNavigationView + Fragment
底部按钮通过点击底部选项,实现中间的Fragment进行页面的切换。



使用BottomNavigationView 控件,实现底部按钮的布局,然后给按钮加上监听,监听选择后,实现中间Fragment页面的切换
上代码:found_main.xml 其他两个文件为menu_main.xml 和 user_main.xml ,从found_main.xml copy 过去就行,修改下里面的样式,便于区分。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent">
<!--用来显示具体内容--> <LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"> <TextView
android:id="@+id/titlename"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_weight="1"
android:background="#2b5361"
android:drawablePadding="3dp"
android:gravity="center"
android:text="发现" /> </LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="45dp"
android:background="@android:color/holo_blue_bright"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2"> <ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@android:drawable/arrow_down_float" />
</LinearLayout> </android.support.constraint.ConstraintLayout>
创建主页面,activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MenuActivity"> <FrameLayout
android:id="@+id/FramePage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_purple"
app:layout_constraintBottom_toTopOf="@+id/viewline"> </FrameLayout> <View
android:id="@+id/viewline"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_above="@id/navigation"
android:background="@android:color/darker_gray"
app:layout_constraintBottom_toTopOf="@+id/navigation" /> <android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" /> </android.support.constraint.ConstraintLayout>
创建BottomNavigationView需要显示的item文件 nabigation.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home" /> <item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/title_dashboard" /> <item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications" /> </menu>
最后上主程序 MenuActivity.java
package action.sun.com.hello; import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.TextView; import action.sun.com.hello.action.sun.com.hello.until.FirstFragment; public class MenuActivity extends AppCompatActivity { private String className= "MenuActivity";
// private ViewPager viewPager;
String msg = "Android : ";
//继承Activity 不会显示APP头上的标题
private FirstFragment f1,f2,f3; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu); final BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation); //bottomNavigationView Item 选择监听
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Log.d("123", "onNavigationItemSelected is click: ");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
hideAllFragment(transaction);
switch (item.getItemId()){
case R.id.navigation_home:
Log.d(className, "R.id.navigation_home: ");
if(f1==null){
f1 = FirstFragment.newInstance("发现",R.layout.found_main);
transaction.add(R.id.FramePage,f1);
}else{
transaction.show(f1);
}
break;
case R.id.navigation_dashboard:
Log.d(className, "R.id.navigation_dashboard: ");
if(f2==null){
f2 =FirstFragment.newInstance("我的",R.layout.user_main);//"第二个Fragment"
transaction.add(R.id.FramePage,f2);
}else{
transaction.show(f2);
}
break;
case R.id.navigation_notifications:
Log.d(className, "R.string.title_notification: ");
if(f3==null){
f3 = FirstFragment.newInstance("关于",R.layout.menu_main);//"第三个Fragment"
transaction.add(R.id.FramePage,f3);
}else{
transaction.show(f3);
}
break;
}
transaction.commit();
Log.d(msg, "xxxxx "); return false;
}
}); } //隐藏所有Fragment
public void hideAllFragment(FragmentTransaction transaction){
if(f1!=null){
transaction.hide(f1);
}
if(f2!=null){
transaction.hide(f2);
}
if(f3!=null){
transaction.hide(f3);
} } }
FirstFragment.java
package action.sun.com.hello.action.sun.com.hello.until; import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.os.Bundle; import action.sun.com.hello.R; public class FirstFragment extends Fragment{ private String context="xxxxxxxxxxxxx";
private TextView mTextView;
//要显示的页面
private int FragmentPage; public static FirstFragment newInstance(String context,int iFragmentPage){ FirstFragment myFragment = new FirstFragment();
myFragment.context = context;
myFragment.FragmentPage = iFragmentPage;
return myFragment;
} @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.context = context;
View view = inflater.inflate(FragmentPage,container,false);
//mTextView = (TextView)view.findViewById(R.id.titlename);
//mTextView = (TextView)getActivity().findViewById(R.id.txt_content);
///mTextView.setText(context);
//mTextView.setBackgroundColor(20);
return view;
}
}
到此,代码结束,可实现上面的效果。

Android 底部按钮BottomNavigationView + Fragment 的使用(二)的更多相关文章
- Android 底部按钮BottomNavigationView + Fragment + viewPager 的使用(一)
实现的效果,左右滑动,底部栏跟着滑动,中间加的是分帧的页面 上代码:主页面activity_main.xml <?xml version="1.0" encod ...
- Android中FragmentPagerAdapter对Fragment的缓存(二)
上一篇我们谈到了,当应用程序恢复时,由于FragmentPagerAdapter对Fragment进行了缓存的读取,导致其并未使用在Activity中新创建的Fragment实例.今天我们来看如何解决 ...
- Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像
此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...
- Android studio 基本布局-底部按钮
在使用Android studio 的时候,准备弄的基本的布局出来,底部按钮,按了中间会显示. 来上代码: 页面menu_main.xml 这里弄控件的浮动耗费了点我的时间.原因是因为对其各种问题, ...
- Android BottomSheet:底部弹出Fragment面板(4)
Android BottomSheet:底部弹出Fragment面板(4) BottomSheet不仅可以弹出轻量级的定制好的面板(见附录文章5,6,7),还可以弹出"重"的 ...
- Android UI-实现底部切换标签(fragment)
Android UI-实现底部切换标签(fragment) 前言 本篇博客要分享的一个UI效果--实现底部切换标签,想必大家在一些应用上面遇到过这样的效果了,最典型的就是微信了,能够左右滑动切换页面. ...
- Android组件内核之Fragment管理与内核(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从以下三个内容来介绍Fragment管理与内核: [Fragm ...
- Android Fragment详解(二):Fragment创建及其生命周期
Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...
- Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)
另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...
随机推荐
- linux手工释放内存
先使用sync命令以确保文件系统的完整性,sync 命令运行 sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node.已延迟的块 I/O 和读写映射文件. 再执行下面任意一条命 ...
- Java之基于S2SH与手机数据交互(一)
在前两篇博客,介绍了在eclipse上搭建SSH,可是好多小伙伴反映.看了偶写滴博客.跟着搭建还是错误百出,唉! 事实上不经历错误怎么能不见红线啊!于是我在上篇博客补充了他们的错误,还在被错误困扰的童 ...
- 使用ShellExecute打开文件夹并选中文件
原文链接: http://futurecode.is-programmer.com/posts/24780.html 假设在C:\目录下存在文件a.txt. 打开这个目录是ShellExecute的常 ...
- systemd的程序自启动脚本编写
以FreeSWITCH的自启动脚本为例. 一. 编写freeswitch.service文件 [Unit] Description=FreeSWITCH After=syslog.target net ...
- Linux 4.10中两个新特性与我的一段故事
今早5点半起来没有開始写文章,而是去西湾红树林连跑带走折腾了将近20公里.回来后就8点多了...洗了个澡之后坐稳当.開始写一段关于我的故事. 在2014年到2015年期间,我在负责研发一 ...
- 一个简单的代码生成器(T4文本模板运用)
说要写这篇文章有一段时间了,但因为最近各方面的压力导致心情十二分的不好,下班后往往都洗洗睡了.今天痛定思痛,终于把这件拖了很久的事做了.好,不废话了,现在看看"一个简单的代码生成器" ...
- linux环境下matlab连接mysql
因为matlab是基于java的,但是原生的matlab是没有jdbc的,这是一个java的mysql connection. 只有matlab有这个包,才能正确的连接mysql. 1.在http:/ ...
- The superclass "javax.servlet.http.HttpServlet" was not found 问题解决
项目中报" The superclass "javax.servlet.http.HttpServlet" was not found "这个错误,是因为缺少t ...
- hdu 2544 最短路(两点间最短路径)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2544 方法一:dijkstra算法,求两点之间最短路径. /*********************** ...
- The Linux Command Line,Script
https://stackoverflow.com/questions/5891342/modify-conf-file-with-shell-script http://www.grymoire.c ...