不受父容器大小约束的TextView

序言

为了实现以下效果,特意开发了一个自定义控件。主要是红色的点赞数和评论数。
在这里插入图片描述

问题分析

在这里插入图片描述

自定义控件

该控件主要是在于忽略的父容器的大小限制,这样可以展示出全部内容。注意父容器的属性中需要下列配置。

package com.trs.myrb.view.count;import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import com.zgh.trsbadge.TextUtils;/*** <pre>* Created by zhuguohui* Date: 2023/12/22* Time: 10:51* Desc:这是一种没有被父类的尺寸约束大小的TextView,内容有多少就显示多少。* 主要目的是可以将显示的内容超过父容器的大小。必须将配置父容器的clipChildren为false。才能看到效果。* 目前用在网页底部工具条显示评论数,点赞数等。父控件的大小是均分的,而显示数量有可能超过父控件。* </pre>*/
public class NoSizeTextView extends androidx.appcompat.widget.AppCompatTextView {private int measuredHeight;private int measuredWidth;public NoSizeTextView(@NonNull Context context) {super(context);}public NoSizeTextView(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);super.onMeasure(spec, spec);measuredHeight = getMeasuredHeight();measuredWidth = getMeasuredWidth();}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, left+measuredWidth, top+measuredHeight);}@Overrideprotected void dispatchDraw(Canvas canvas) {super.dispatchDraw(canvas);}@Overridepublic void draw(Canvas canvas) {CharSequence text = getText();//这部分是为了在数据量为0的时候自动隐藏,可以根据具体业务场景进行保留或删除if(TextUtils.isEmpty(text)||"0".contentEquals(text)){return;}super.draw(canvas);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);}
}

参考布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/status_layout"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/normal_background_color"><RelativeLayoutandroid:id="@+id/layout_content"android:layout_width="match_parent"android:layout_height="match_parent"><Viewandroid:layout_width="match_parent"android:layout_height="@dimen/TRSDividerSize"android:background="@color/divider_color" /><TextViewandroid:id="@+id/tv_comment"android:layout_width="187dp"android:layout_height="33dp"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:background="@drawable/bg_common_text"android:gravity="center_vertical"android:paddingLeft="10dp"android:text="我来说两句..."android:textColor="@color/second_title_color"android:textSize="@dimen/TRSSecondTitleSize" /><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_toEndOf="@id/tv_comment"android:clipChildren="false"android:gravity="center"android:orientation="horizontal"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_toEndOf="@id/tv_comment"android:clipChildren="false"android:gravity="center"android:orientation="horizontal"><RelativeLayoutandroid:id="@+id/comment_layout"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:clipChildren="false"android:visibility="visible"><ImageViewandroid:id="@+id/iv_comment"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:scaleType="center"android:src="@drawable/ic_comment" /><com.trs.myrb.view.count.NoSizeTextViewandroid:id="@+id/tv_comment_number"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_above="@id/iv_comment"android:layout_marginStart="-8dp"android:layout_marginBottom="-5dp"android:layout_toEndOf="@id/iv_comment"android:background="@drawable/shape_red_commet"android:paddingStart="3dp"android:paddingEnd="3dp"android:textColor="@color/white"android:textSize="9sp"tools:text="1000" /></RelativeLayout><RelativeLayoutandroid:id="@+id/like_layout"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:clipChildren="false"android:visibility="visible"><ImageViewandroid:id="@+id/iv_like"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:layout_weight="1"android:scaleType="center"android:src="@drawable/web_bottom_view_like" /><com.trs.myrb.view.count.NoSizeTextViewandroid:id="@+id/tv_like_number"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_above="@id/iv_like"android:layout_marginStart="-8dp"android:layout_marginBottom="-5dp"android:layout_toEndOf="@id/iv_like"android:background="@drawable/shape_red_commet"android:paddingStart="3dp"android:paddingEnd="3dp"android:textColor="@color/white"android:textSize="9sp"tools:text="10000" /></RelativeLayout><ImageViewandroid:id="@+id/iv_collected"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:scaleType="center"android:src="@drawable/bg_collected" /><ImageViewandroid:id="@+id/iv_share"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:scaleType="center"android:src="@drawable/ic_web_share" /></LinearLayout><TextViewandroid:id="@+id/tv_comment_count"android:layout_width="wrap_content"android:layout_height="wrap_content" /></FrameLayout></RelativeLayout><RelativeLayoutandroid:id="@+id/layout_loading"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/normal_background_color"android:visibility="gone"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:gravity="center"android:orientation="horizontal"><ProgressBarandroid:id="@+id/progressbar"android:layout_width="30dp"android:layout_height="30dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_loading" /></LinearLayout></RelativeLayout><RelativeLayoutandroid:id="@+id/layout_error"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_item_common"android:visibility="gone"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="@string/str_error" /></RelativeLayout>
</FrameLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/292676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机体系结构实验——Branch-Target Buffers

实验五 Branch-Target Buffers 本次实验的主要目的是加深对Branch-Target Buffers的理解。掌握使用Branch-Target Buffers减少或增加分支带来的延迟的情况。 实验内容&#xff1a; 将以下程序段修改为可利用WinMIPS64模拟器运行的程序。假设R3的初始值为R240 在使用forward…

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex &#xff08;基本互斥锁&#xff09;2. std::recursive_mutex &#xff08;递归互斥锁&#xff09;3. std::timed_mutex &#xff08;限时等待互斥锁&#xff09;4. std::recursive_timed_mutex &#xff08;限时等待…

rhel7/centos7升级openssh到openssh9.5-p1

openssh9.3-p2以下版本有如下漏洞 在rhel7.4/7.5/7.6均做过测试。 本文需要用到的rpm包如下&#xff1a; https://download.csdn.net/download/kadwf123/88652359 升级步骤 1、升级前启动telnet ##升级前启动telnet服务 yum -y install telnet-server yum -y install xinetd…

Redis(非关系型数据库)

Redis(非关系型数据库) 文章目录 Redis(非关系型数据库)认识Redis(Remote Dictionary Server)1.Redis的基本介绍2.Redis的应用场景2.1 取最新N个数据的操作2.2 排行榜应用,取TOP N操作2.3 需要精准设定过期时间的应用2.4 计数器应用2.5 Uniq 操作&#xff0c;获取某段时间所有数…

MATLAB遗传算法工具箱的三种使用方法

MATLAB中有三种调用遗传算法的方式&#xff1a; 一、遗传算法的开源文件 下载“gatbx”压缩包文件&#xff0c;解压后&#xff0c;里面有多个.m文件&#xff0c;可以看到这些文件的编辑日期都是1998年&#xff0c;很古老了。 这些文件包含了遗传算法的基础操作&#xff0c;包含…

【深度学习实践】换脸应用dofaker本地部署

本文介绍了dofaker换脸应用的本地部署教程&#xff0c;dofaker支持windows、linux、cpu/gpu推理&#xff0c;不依赖于任何深度学习框架&#xff0c;是一个非常好用的换脸工具。 本教程的部署系统为windows 11&#xff0c;使用CPU推理。 注意&#xff1a; 1、请确保您的所有路…

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

文章目录 前言千帆AppBuilder什么是千帆AppBuilderAppBuilder能做什么 体验千帆AppBuilderJava知识库高考作文小助手 总结 前言 前天&#xff0c;在【百度智能云智算大会】上&#xff0c;百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台&#xff0c;可以…

线程活跃性问题(死锁、活锁、饥饿)

1.什么是“死锁”&#xff1f; 在多线程并发中,两个及以上线程互相持有对方所需要的资源又不主动释放&#xff0c;导致程序进入无尽的阻塞这就是“死锁”; 2.写一段“死锁”代码 import java.util.concurrent.TimeUnit; /*** 写一段必然发生死锁代码*/ public class MustDead…

01、ThreadPoolExecutor 线程池源码完整剖析 ------ 线程池工作流程、参数解析、简单创建线程池及使用演示

目录 线程池源码剖析什么是线程&#xff1f;什么是多线程&#xff1f;什么是线程池 &#xff1f;为什么需要用到线程池 &#xff1f;使用线程池有哪些优势 &#xff1f;线程的应用场景有哪些 &#xff1f; 2、线程池工作流程ThreadPoolExecutor参数详解1、核心线程数&#xff0…

【Jmeter】循环执行某个接口,接口引用的参数变量存在规律变化

变量设置成下面的值即可 ${__V(supplierId_${supplierIdNum})}

【即插即用篇】YOLOv8改进实战 | 引入 Involution(内卷),用于视觉识别的新一代神经网络!涨点神器!

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成…

STM32 AI 模型测试

PC仿真软件测试 我在STM32单片机上跑神经网络算法—CUBE-AI_stm32cube.ai-CSDN博客 仿真软件测试结果和真实情况差距过大 云平台测试 Home - STM32Cube.AI Developer Cloud 上传模型文件 点击Start 选择优化方式 可以跳过量化步骤&#xff0c;到Benchmark 选择合适的型号&a…