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.所 ...
随机推荐
- GDataXMLNode:xml解析库
IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...
- IT系统故障引起的一个事故的思考
记得几年前在我以前工作过的一个公司,因为系统的一个审批流突然中断,而且也没有在系统中触发邮件和短信等提示消息,而且我们的相关的审批人员和发 起人也没有在意.直到流程发起的同事在采购物品即将要使用的前2 ...
- Transparent Huge Pages
在RHEL6中,透明大页功能是默认开启的. 开启该选项后,内核会尽可能地尝试分配大页,如果mmap区域是2mb,那么每个linux进程都会分配到2mb大小的页.如果大页不够用了(比如物理内存不够了), ...
- 你的应用是怎样被替换的,App劫持病毒剖析
一.App劫持病毒介绍 App劫持是指运行流程被重定向,又可分为Activity劫持.安装劫持.流量劫持.函数运行劫持等. 本文将对最近利用Acticity劫持和安装劫持的病毒进行分析. 二.Acti ...
- 《从零開始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
原创文章,欢迎转载.转载请注明:关东升的博客 实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,演示样例代码例如以下: butt ...
- df -h和du -sh显示结果不一样的原因及解决
一.背景:一台2T硬盘的mysql服务器,保存电话的CDR信息.按照历史数据的水平,一个月能生成20+GB的文件.然而短短的半年时间,满了?! 登录服务器看谁占了这么大的空间?好吧,slow-quer ...
- ASP.NET项目在IIS上使用虚拟目录
在IIS中,应用程序与虚拟目录特别容易混淆,但两者又是完全不同的概念. 应用程序是一个逻辑边界,这个边界可以分隔网站及其组成部分.虚拟目录则是一个真实的指针,这个指针指向了一个本地或远程的物理路径.虚 ...
- centos 7 下图形验证码乱码
工作中遇到一个问题:同样的代码在centos 6.5下图形验证码是正常的 但是在centos 7下面是乱码 centos 6.5 的系统字体库目录 [wwwad@P2P-test2 fonts]$ p ...
- centos安装Elasticsearch步骤
1.安装JDK:centos删除openJDK,安装JDK,vim /etc/profile配置JAVA_HOME 2.官网下载elasticsearch:https://www.elastic.co ...
- MySQL 5.6学习笔记(函数)
1. 数学函数 ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEIL(x)或CEILING(x) 返回大于x的最小整数值EXP(x) ...