Android 可折叠式标题栏的实现_android coordinatorlayout floatingactionbutton col-程序员宅基地

技术标签: Android基础笔记  android  CardView  AppBarLayout  悬浮按钮  Toolbar  

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
点击跳转到网站

先看效果图:

在这里插入图片描述
一、实现步骤:

1、布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.FruitActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="250dp">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:id="@+id/collapsing"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/iv_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/head"
                app:layout_collapseMode="parallax" />

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:id="@+id/nested_scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="35dp"
                android:layout_marginRight="15dp"
                android:layout_marginBottom="15dp"
                app:cardBackgroundColor="@color/white"
                app:cardCornerRadius="4dp">

                <TextView
                    android:id="@+id/tv_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:text="我这里是一个卡片布局!" />
            </androidx.cardview.widget.CardView>
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/floating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:background="#00000000"
        android:src="@drawable/comment"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end"></com.google.android.material.floatingactionbutton.FloatingActionButton>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

接下来我们来分析这里面的控件和属性:

  1. 最外层的布局为 CoordinatorLayout
    :相当于加强版的FrameLayout,在普通情况下的作用和FrameLayout基本一致。当然也会有其独特的作用,CoordinatorLayout可以监听其所有子控件的各种事件,然后自动帮我们做出最为合理的响应。

  2. AppBarLayout:实际上是一个垂直方向的LinearLayout,在内部做了很多封装,并应用了一些Material Design的设计理念。

  3. CollapsingToolbarLayout是作用于Toolbar基础之上的一个布局,CollapsingToolbarLayout可以让Toolbar的效果变得更加丰富。

  4. app:layout_scrollFlags="scroll|exitUntilCollapsed"属性:srcoll表示CollapsingToolbarLayout会随着内容的滚动一起滚动,exitUntilCollapsed表示当CollapsingToolbarLayout随着滚动完成折叠之后就保留在界面上,不再移出屏幕。

  5. app:contentScrim="?attr/colorPrimary"属性:用于指定在CollapsingToolbarLayout在趋于折叠状态以及折叠之后的背景色。

  6. app:layout_collapseMode="pin"属性:用于指定在控件CollapsingToolbarLayout折叠过程中的折叠模式,pin表示在折叠过程中位置始终不变。

  7. app:layout_collapseMode=“parallax” 属性:表示在折叠的过程中产生一定的错位偏移。

  8. NestedScrollView控件:即有ScrollView控件使用滚动的方式来查看屏幕以外的数据,NestedScrollView在此基础之上还增加了嵌套响应滚动事件的功能。

  9. app:layout_behavior="@string/appbar_scrolling_view_behavior"指定了一个布局行为

  10. CardView:用于实现卡片式布局效果的重要控件,额外提供了圆角和阴影的效果。

  11. app:cardCornerRadius属性:指定卡片圆角的弧度。

  12. FloatingActionButton悬浮按钮

关于控件和属性就说这么多。
接下来就是实现java代码了,代码如下:

public class FruitActivity extends AppCompatActivity {
    

    private CollapsingToolbarLayout collapsing;
    private Toolbar toolbar;
    private FloatingActionButton floating;
    private TextView tv_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fruit);
        collapsing = findViewById(R.id.collapsing);
        toolbar = findViewById(R.id.toolbar);
        floating = findViewById(R.id.floating);
        tv_text = findViewById(R.id.tv_text);

        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
    
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
        collapsing.setTitle("这是CollapsingToolbarLayout");
        String text = "努力努力再努力";

        tv_text.setText(generateText(text));
        floating.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                Toast.makeText(FruitActivity.this, "您点击了悬浮按钮哦!", Toast.LENGTH_SHORT).show();
            }
        });

    }

    private String generateText(String text) {
    
        StringBuilder stringBuilder = new StringBuilder("");
        for (int i = 0; i < 500; i++) {
    
            stringBuilder.append(text);
        }
        return stringBuilder.toString();
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    
        switch (item.getItemId()) {
    
        	//Toolbar左上角默认有一个返回的箭头,含义是返回上一个活动
        	//这个按钮叫做HomeAsUp按钮,这个按钮的id永远都是android.R.id.home
            case android.R.id.home:
                finish();
                break;
        }
        return true;
    }
}

有不当之处还望各位指正,一起学习,共同进步!加油!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lu202032/article/details/120383111

智能推荐

python concurrent.futures 模块启动并行任务_python concurrent.future模块-程序员宅基地

文章浏览阅读117次。是一个使用线程池执行任务的实现。它允许将可调用对象提交到线程池中,并在后台异步执行。是一个抽象类,定义了异步执行可调用对象的通用接口。可以指定超时时间,以便在超时后取消未完成的任务。在不同的进程中执行任务,适用于CPU密集型任务。对象,然后可以在将来的某个时候获取实际的结果。是一个使用进程池执行任务的实现。函数是一个生成器,它迭代一组。可以用于按照完成顺序获取结果。表示异步计算的结果。_python concurrent.future模块

在CMD中运行java程序_cmd运行程序-程序员宅基地

文章浏览阅读1.8k次。在CMD中运行java程序运行原理实际操作不在项目下的.java运行在项目下的.java运行注意事项运行原理运行一个编写好的java文件需要两步,第一步是讲我们的.java文件通过javac编译成.class文件。然后计算机用java去运行.class文件。众所周知,Java是一门高级计算机语言,计算机是无法直接运行的,我们需要通过javac(java compiler)将它们编译成字节代码(0和1组成)的class文件。其中javac由java语言编写的类和接口的定义。而java运行.class文件,_cmd运行程序

RPC、RMI、HTTP、REST的区别(小知识)_rpc rmi 与resthttp请求-程序员宅基地

文章浏览阅读400次。RPC:远程服务调用(Remote Procedure Call),加上Protocol后可以称为远程过程调用协议,可以用不同的语言实现,可以借用HTTP协议或者其他协议来实现,一般都是通过基于TCP/IP的自定义协议实现。HTTP协议和TCP/IP协议有什么关系呢?HTTP是应用层协议,TCP/IP是传输层协议。HTTP协议请求中会包含很多内容,传输效率要低,一般RPC实现都不采用HTTP协议;RPC采用自定义的TCP协议,可以精简报文格式,一般都是采用二进制形式,客户端和服务端采用统一的序列化和_rpc rmi 与resthttp请求

SUN RPC的传输层实现机制_sunrpc 传输层交互-程序员宅基地

文章浏览阅读3.4k次。通信语义为保证RPC语义的实现,我们必须在良种可能中进行选择。一方面,为尽量使远程过程调用的行为像一个本地过程调用,RPC应该使用一种像TCP这样可靠的运输,而且应该对程序员保证可靠性。另一方面,为允许程序员使用高效率的、无连接的运输协议,远程过程调用机制应当支持用UDP这样的数据报协议进行通信。因为UDP传输的不可靠性,在传输过程中可能因为报文的丢失,使得调用者无法做出应答,而导致远程过_sunrpc 传输层交互

实验一 学生成绩管理系统_3、创建并执行游标t3。将不合格的成绩信息全部输出(输出值有:学号、课程号、-程序员宅基地

文章浏览阅读446次。1. 问题描述学生成绩管理系统中的数据元素具有如下形式:学生的成绩记录包括学号、姓名、语文、数学、计算机等数据项。2.功能要求对成绩登记表要求完成如下功能:⑴ 插入:将某学生成绩记录插入到登记表中;⑵ 删除:将满足条件的记录删除;⑶ 修改:对成绩记录的数据项进行修改;⑷ 查询:查找满足条件的学生;⑸ 输出:将成绩记录登记表中的全部(或满足条件)成绩记录输出。3.实现要点 对成绩记录登记表采用顺序的存储结构,在建立表时,由成绩记录表的书写形式转化顺_3、创建并执行游标t3。将不合格的成绩信息全部输出(输出值有:学号、课程号、

VMware ESXi 更换 CA 证书-程序员宅基地

文章浏览阅读5.2k次。1、OpenSSL 配置文件 esxi.cfg[req]default_bits = 2048default_keyfile = rui.keydistinguished_name = req_distinguished_nameencrypt_key = noprompt = nostring_mask = nombstrreq_extensions = v3_req[ r...

随便推点

基于YOLOv5的人体行为检测_yolov5人体检测-程序员宅基地

文章浏览阅读844次。YOLOv5是一种实时目标检测算法,具有速度快、精度高、易于部署等优点。相较于之前的版本,YOLOv5在结构上进行了一些优化,如引入SPP模块、PANet路径聚合等,进一步提高了检测性能。这使得YOLOv5成为人体行为检测的理想选择Backbone网络:使用了一种轻量级的骨干网络作为特征提取器,以获得图像中的特征表示。常用的选择是CSPDarknet作为骨干网络,采用了Cross-Stage Partial连接(CSP)结构来提高网络的效率和准确性。Neck网络:引入了一个称为PANet。_yolov5人体检测

SpringBoot controller 获取 请求URL中的信息(域名/端口/header等信息)_springboot 获取域名-程序员宅基地

文章浏览阅读2.8w次,点赞2次,收藏6次。前言:前段时间开发的的一个接口是个下载Excel模板的接口,本来是想放在公司的资源服务器上面,后来听组长说正在数据量小并且文件很小的东西可以维护在自己项目中的本地资源,然而问题出现了,我是直接给前端返回一个指向静态资源的URL地址,但是我在dev环境 是dev路径 到test环境还要修改,到生产还要修改,这样每次发版每次修改都很麻烦,今天有时间来看下这个问题,想到了个思路【前端每次请求的时候 我..._springboot 获取域名

Go学习之 GoLand-IDE安装并实现HelloWorld(附学生免费注册流程)【win10】_golangidea学生可以免费吗-程序员宅基地

文章浏览阅读1.5w次,点赞35次,收藏121次。一、Go语言安装安装包下载地址见:https://golang.google.cn/dl/目前官网最新版是go1.13,这里我就下载windows ×64版本的…之后双击安装,一路Next就行了。需要注意的就是安装路径,默认是C盘,这里我更改为了D盘。二、Go语言环境变量配置环境变量的打开方式:【电脑右键 -> 属性 -> 高级系统设置 -> 环境变量】1、安装..._golangidea学生可以免费吗

shiro cas 遇到 票根验证问题_票根不符合目标服务-程序员宅基地

文章浏览阅读5.3k次。1、票根不符合目标服务解决方法:检查web.xml里的shiro拦截器和cas ticket拦截器的拜访顺序,应该cas 白在shiro前面原因:shiro也有验证机制,但不识别票根。2、票根无法识别(无效)解决方法:找到web-INF/spring-configuration/ticketExpirationPolicies.xml,找到 c:numberOfUs_票根不符合目标服务

MySQL搭建主从复制集群,实现读写分离_创建mysql集群,主从复制,读写分离,实现一主两从-程序员宅基地

文章浏览阅读620次,点赞2次,收藏3次。Sharding-JDBC定位为轻量级的Java框架,在Java的jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可以理解为增强版的jdbc驱动,完全兼容jdbc和各种orm框架。适用于任何基于JDBC的ORM框架,如:JPA,Hibernate,Mybatis,Spring JDBC Template或直接使用JDBC。支持任何第三方的数据库连接池,如:DBCP,C3P0,Druid,HikariCP等。支持任意实现JDBC规范的数据库。_创建mysql集群,主从复制,读写分离,实现一主两从

【软考】系统集成项目管理工程师(四)项目管理一般知识_【软考】系统集成项目管理工程师(4)项目-程序员宅基地

文章浏览阅读9.4w次,点赞78次,收藏118次。软考中级——系统集成项目管理工程师备考干货第四章:项目管理一般知识。_【软考】系统集成项目管理工程师(4)项目

推荐文章

热门文章

相关标签