iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现酷炫的顶部栏
  • 849
分享到

Android实现酷炫的顶部栏

Android 2022-06-06 07:06:07 849人浏览 独家记忆
摘要

AppBarLayout 是继承LinerLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作的,不过

AppBarLayout 是继承LinerLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作的,不过经常与Toolbar、CoordinatorLayout以及CollapsingToolbarLayout等一起配合使用,在说到AppBarLayout之前,我们先简单学习一下Toolbar。和往常一样,主要还是想总结一下我在学习过程中的一些笔记以及一些需要注意的地方。

一、Toolbar

Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar,也就是说,ActionBar能做的,Toolbar都能做 。与 Actionbar 相比, Toolbar 要灵活的多。它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置。除此之外,在设计 Toolbar 的时候,Google也留给我们很多可以修改的余地

 •设置导航栏图标
 •设置App的logo
 •设置标题和子标题
 •添加一个或多个的自定义控件
 •设置Action Menu 

为了容易理解,我们先看看效果图:

按照效果图,从左到右分别是导航栏图标 、App的logo 、 标题和子标题 、 自定义控件(一个TextView和ImageView) 以及 ActionMenu

1、用Toolbar的时候,首先要隐藏原本的ActionBar
(1)通过在我们的styles.xml文件中的AppTheme标签中设置以下属性:

<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>

(2)通过修改我们继承的主题为:Theme.AppCompat.Light.NoActionBar


<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorPrimary">@color/blue</item>
  <item name="colorPrimaryDark">@color/blue_dark</item>
  <item name="colorAccent">@color/red</item>
  <item name="textAllCaps">false</item>
 </style>

(3)在Activity中调用下面这句,去掉了默认的导航栏

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

2、在布局文件中添加我们需要的Toolbar控件


<?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">
 <android.support.v7.widget.Toolbar
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="?android:actionBarSize"
  android:background="?attr/colorPrimary">
  <!--自定义控件-->
  <TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="点击" />
  <ImageView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginLeft="2dp"
   android:src="@mipmap/icon" />
 </android.support.v7.widget.Toolbar>
</LinearLayout>

3、接着在 menu_main.xml 中添加 action menu 菜单项


<menu xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto">
 <item
  android:id="@+id/add"
  android:icon="@mipmap/icon_add"
  app:showAsAction="always" />
 <item
  android:id="@+id/add_friend"
  android:title="添加朋友"
  app:showAsAction="never" />
 <item
  android:id="@+id/scace"
  android:title="扫一扫"
  app:showAsAction="never" />
</menu>

4、在Activity 中初始化Toolbar 控件,并设置相对应的属性


package per.lijuan.appbarlayoutdome;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;

public class Activity extends AppCompatActivity {
 private Toolbar toolbar;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.activity_second);
  toolbar = (Toolbar) findViewById(R.id.toolbar);
  
  toolbar.setTitle("标题");
  
  toolbar.setSubtitle("子标题");
  
  toolbar.setLogo(R.mipmap.ic_launcher);
  
  toolbar.setNavigationIcon(R.mipmap.back);
  setSupportActionBar(toolbar);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.menu_main, menu);
  return true;
 }
 
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
   case android.R.id.home:
    finish();
    break;
   case R.id.add:
    Toast.makeText(SecondActivity.this, "添加", Toast.LENGTH_SHORT).show();
    break;
   case R.id.add_friend:
    Toast.makeText(SecondActivity.this, "添加朋友", Toast.LENGTH_SHORT).show();
    break;
   case R.id.scace:
    Toast.makeText(SecondActivity.this, "扫一扫", Toast.LENGTH_SHORT).show();
    break;
   default:
    break;
  }
  return super.onOptionsItemSelected(item);
 }
}

二、CollapsingToolbarLayout

CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)

三、AppBarLayout

我们来看看最终的效果图:

从效果图来看,当设置了layout_behavior的控件响应起了CollapsingToolbarLayout中的layout_scrollFlags事件时,ImageView会有视差效果的向上滚动移除屏幕,当开始折叠时,CollapsingToolbarLayout的背景色(也就是Toolbar的背景色)就会变为我们设置好的背景色,Toolbar也一直会固定在最顶端

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <android.support.design.widget.AppBarLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
  <android.support.design.widget.CollapsingToolbarLayout
   android:id="@+id/collapsing_toolbar_layout"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:contentScrim="#3F51B5"
   app:layout_scrollFlags="scroll|exitUntilCollapsed">
   <ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:src="@mipmap/icon_bg"
    app:layout_collapseMode="parallax"
    app:layout_collapseParallaxMultiplier="0.5" />
   <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    app:layout_collapseMode="pin"
    app:title="@string/app_name"
    app:titleTextColor="#FFFFFF" />
  </android.support.design.widget.CollapsingToolbarLayout>
 </android.support.design.widget.AppBarLayout>
 <android.support.v7.widget.RecyclerView
  android:id="@+id/recyclerview"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

(1)我们在CollapsingToolbarLayout中设置了一个ImageView和一个Toolbar,并将这个CollapsingToolbarLayout作为一个整体放在AppBarLayout中

(2)在CollapsingToolbarLayout中,我们设置了app:layout_scrollFlags="scroll|enterAlwaysCollapsed",它的值还包括:
 •scroll - 想滚动就必须设置这个,也就是说值设为scroll的View会跟随滚动事件一起滚动
◦enterAlways - 值设为enterAlways的View,当RecyclerView往下滚动时,该View会直接往下滚动
 ◦exitUntilCollapsed - 值设为exitUntilCollapsed的View,当这个View要往上逐渐“消逝”时,会一直往上滑动,直到剩下的的高度达到它的最小高度后,再响应RecyclerView的内部滑动事件。
 ◦enterAlwaysCollapsed - 当值设为enterAlwaysCollapsed 的View已经设置minHeight属性又使用此标志时,这个View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度 

另外app:contentScrim="#3F51B5"是指当完全CollapsingToolbarLayout折叠(收缩)后的背景颜色

(3)在ImageView控件中,我们设置了app:layout_collapseMode="parallax",layout_collapseMode (折叠模式) - 有两个值:
 •pin - 设置为这个模式时,当CollapsingToolbarLayout完全收缩后,Toolbar还可以保留在屏幕上
 •parallax - 设置为这个模式时,在内容滚动时,CollapsingToolbarLayout中的View(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier(设置视差因子)搭配使用 

另外app:layout_collapseParallaxMultiplier="0.5"设置视差滚动因子,值为:0~1

(4)在Toolbar控件中,我们设置了layout_collapseMode(折叠模式):为pin

MainActivity.class


package com.per.appbarlayout;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
 public Toolbar mToolbar;
 private RecyclerView mRecyclerView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mToolbar = (Toolbar) findViewById(R.id.toolbar);
  mToolbar.setTitleTextColor(Color.GREEN);
  mToolbar.setTitle("AppBarLayout");
  setSupportActionBar(mToolbar);
  getSupportActionBar().setHomeButtonEnabled(true);
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
  mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
  mRecyclerView.setAdapter(new ContentAdapter());
  CollapsingToolbarLayout mCollapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
  //通过CollapsingToolbarLayout设置title
  mCollapsingToolbarLayout.setTitle("AppBarLayout");
  //通过CollapsingToolbarLayout修改字体颜色
  mCollapsingToolbarLayout.setExpandedTitleColor(Color.WHITE);//设置还没收缩时状态下字体颜色
  mCollapsingToolbarLayout.setCollapsedTitleTextColor(Color.RED);//设置收缩后Toolbar上字体的颜色
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.menu_main, menu);
  return true;
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
   case android.R.id.home:
    finish();
    break;
  }
  return super.onOptionsItemSelected(item);
 }
 private class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ContentHolder> {
  @Override
  public ContentAdapter.ContentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   return new ContentHolder(LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false));
  }
  @Override
  public void onBindViewHolder(ContentAdapter.ContentHolder holder, int position) {
   holder.itemTv.setText("item");
  }
  @Override
  public int getItemCount() {
   return 35;
  }
  class ContentHolder extends RecyclerView.ViewHolder {
   private TextView itemTv;
   public ContentHolder(View itemView) {
    super(itemView);
    itemTv = (TextView) itemView.findViewById(android.R.id.text1);
   }
  }
 }
}
您可能感兴趣的文章:Android仿网易客户端顶部导航栏效果Android项目实战之仿网易顶部导航栏效果Android自定义View之组合控件实现类似电商app顶部栏3种Android隐藏顶部状态栏及标题栏的方法Android顶部工具栏和底部工具栏的简单实现代码Android实现沉浸式导航栏实例代码Android程序开发之Fragment实现底部导航栏实例代码Android实现沉浸式通知栏通知栏背景颜色跟随app导航栏背景颜色而改变Android实现底部导航栏功能(选项卡)android底部菜单栏实现原理与代码


--结束END--

本文标题: Android实现酷炫的顶部栏

本文链接: https://www.lsjlt.com/news/24040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android CoordinatorLayout+AppBarLayout顶部栏吸顶效果的实现
    1.控件简介。 CoordinatorLayout遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的折叠悬浮效果。   ...
    99+
    2023-10-06
    android
  • Android Fragment实现顶部、底部导航栏
    前言 无论是顶部还是底部导航栏,都是大多数APP的标配,网络上的相关实现教程也非常之多。最近回忆起以前写的小项目,发现对这块内容有些遗忘,不妨就再整理一遍代码逻辑,记录下来,方便日后...
    99+
    2024-04-02
  • Android 实现沉浸式状态栏(包含顶部栏吸顶Layout CoordinatorLayout实现沉浸式状态栏)
    前言 Android状态栏默认是固定的黑底白字,这肯定是不被伟大的设计师所喜爱的,更有甚者,某些时候设计希望内容能够延伸到状态栏上部(例如顶部是大图的情况)。所幸的是随着Android版本的迭代,开发者对状态栏等控件有了更多的控制。Andr...
    99+
    2023-09-12
    android
  • Flutter实现底部和顶部导航栏
    Flutter底部和顶部导航栏的实现,供大家参考,具体内容如下 带文字图标的底部导航栏(使用BottomNavigationBar和BottomNavigationBarItem)来...
    99+
    2024-04-02
  • Vue+Vant实现顶部搜索栏
     本文实例为大家分享了Vue+Vant实现顶部搜索栏的具体代码,供大家参考,具体内容如下 搜索栏组件源码(SearchBar.vue) <template>...
    99+
    2024-04-02
  • Android顶部标题栏的布局设计
    目录自定义标题栏布局与九宫格背景图布局九宫格图片总结自定义标题栏 通常我们的活动页面都会根据需要都会有不同的标题栏需要选择,一般有两个场景,一个是统一标题栏,通过引入布局到活动来进行...
    99+
    2024-04-02
  • Flutter实现顶部导航栏功能
    本文实例为大家分享了Flutter实现顶部导航栏的具体代码,供大家参考,具体内容如下 import 'package:flutter/material.dart'; class A...
    99+
    2024-04-02
  • 利用Android实现比较炫酷的自定义View
    目录一、背景1.1、控件效果1.2、从功能上分析一下这个控件,大致有以下特点1.3、从结构上分析二、 背景圆实现2.1、实现粒子运动2.2、实现渐变色圆2.3、展示背景圆的扇形区域2...
    99+
    2024-04-02
  • Android 去除默认的顶部导航栏
    在Android Studio中,我们新建项目运行之后,在应用顶部,会有一个默认顶部栏,很影响体验。那么我们怎样去掉他,有三种方法。 方法1:直接调用系统的 无需自定义style配置的,...
    99+
    2023-09-02
    android android studio Powered by 金山文档
  • vue顶部菜单栏实现小结
    参考: 使用element-ui的el-menu导航选中后刷新页面保持当前选中状态 效果图1: <!--home--> <template> <d...
    99+
    2024-04-02
  • CSS+HTML实现顶部导航栏的方法
    这篇文章主要介绍了CSS+HTML实现顶部导航栏的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更...
    99+
    2023-06-14
  • js实现炫酷的烟花效果
    本文实例为大家分享了js实现炫酷的烟花效果的具体代码,供大家参考,具体内容如下 我们要理清整个流程的思路。 首先建立一块画布,用于展示烟花的效果,然后就要去思考烟花燃放的流程,我们都...
    99+
    2024-04-02
  • Android怎么实现顶部轮播
    Android实现顶部轮播可以使用ViewPager+PagerAdapter的方式。以下是一个简单的实现示例:1. 在布局文件中添...
    99+
    2023-08-19
    Android
  • Android实现顶部悬浮效果
    本文实例为大家分享了Android实现顶部悬浮效果的具体代码,供大家参考,具体内容如下效果图 布局<?xml version="1.0" encoding="utf-8"?><android.su...
    99+
    2023-05-30
    android 顶部悬浮 roi
  • 如何利用Android实现比较炫酷的自定义View
    本篇内容主要讲解“如何利用Android实现比较炫酷的自定义View”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何利用Android实现比较炫酷的自定义View”吧!目录一、背景1、控件效果...
    99+
    2023-06-20
  • Android中怎么自定义ProgressBar实现酷炫进度条
    要在Android中自定义ProgressBar并实现酷炫的进度条效果,你可以按照以下步骤进行操作:1. 创建一个新的自定义Prog...
    99+
    2023-10-18
    Android
  • Android中怎么实现一个炫酷进度条效果
    这期内容当中小编将会给大家带来有关Android中怎么实现一个炫酷进度条效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HorizontalProgressbarWithProgress的代码impor...
    99+
    2023-05-30
    android
  • Python如何实现炫酷的动态图
    这篇文章主要为大家展示了“Python如何实现炫酷的动态图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现炫酷的动态图”这篇文章吧。启动如果你还没安装 Plotly,只需在你的...
    99+
    2023-06-28
  • Android应用中怎实现一个顶部导航栏滑动效果
    本篇文章给大家分享的是有关Android应用中怎实现一个顶部导航栏滑动效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。向app Module中的build.gradle中添加...
    99+
    2023-05-31
    android roi
  • css新浪首页顶部栏怎么实现
    今天小编给大家分享一下css新浪首页顶部栏怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作