Idea-深入github Android(三)

【新手向】IDEA搭建Android开发环境 如何利用IDEA编程利器搭建Android开发环境,从而用更少的IDE开发更多种多样的程序。文章包含了JDK\Android SDK环境的下载安装以及IDEA中Android环境的搭建和测试以及如何用IDEA新建Android项目。 阅读详情

Keywords: Android TextView

github:https://github.com/grantland/android-autofittextview

本篇主讲autofittextview库,这个开源项目主要用于输入文字显示,自动根据文字长度调整文字大小以保证单行/指定行数能全显示,文字缩放到最小的时候用省略号代替。

效果图对比:


上图展示效果而言,我大胆猜想其实现原理:

  • 缩放文字textSize ,缩放有最大、最小比例限制

  • addOnTextSizeChangeListener() 文字发生变化,内容长度变化重新测量,决定是否需要缩放文字textSize 或者是否达到缩放临界值

带着个人猜想来注意了解这个开源项目,先来看项目结构


AutofitHelper的create()函数做了两件事

  • 通过创建自身实例,获取不同手机各自的字体缩放比例计算字体缩放到最小的像素值,以及一些其他的基本变量赋值

  • 获取自定义属性赋值变量

     public static AutofitHelper create(TextView view, AttributeSet attrs, int defStyle) {
        AutofitHelper helper = new AutofitHelper(view);
        boolean sizeToFit = true;
        if (attrs != null) {
            Context context = view.getContext();
            int minTextSize = (int) helper.getMinTextSize();
            float precision = helper.getPrecision();

            TypedArray ta = context.obtainStyledAttributes(
                    attrs,
                    R.styleable.AutofitTextView,
                    defStyle,
                    0);
            sizeToFit = ta.getBoolean(R.styleable.AutofitTextView_sizeToFit, sizeToFit);
            minTextSize = ta.getDimensionPixelSize(R.styleable.AutofitTextView_minTextSize,
                    minTextSize);
            precision = ta.getFloat(R.styleable.AutofitTextView_precision, precision);
            ta.recycle();

            helper.setMinTextSize(TypedValue.COMPLEX_UNIT_PX, minTextSize)
                .setPrecision(precision);
        }
        helper.setEnabled(sizeToFit);

        return helper;
      }

setEnabled()方法用于控制是否支持自动缩放适应,该方法与autoTextView自定义属性sizeToFit对应。为什么一个boolean变量就可以控制呢?看过源码就一目了然了

      public AutofitHelper setEnabled(boolean enabled) {
        if (mEnabled != enabled) {
            mEnabled = enabled;

            if (enabled) {
                mTextView.addTextChangedListener(mTextWatcher);
                mTextView.addOnLayoutChangeListener(mOnLayoutChangeListener);

                autofit();
            } else {
                mTextView.removeTextChangedListener(mTextWatcher);
                mTextView.removeOnLayoutChangeListener(mOnLayoutChangeListener);

                mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
                }
            }
            return this;
        }

不管是文字长度发生变化还是控件宽高随着文字大小发生变变化而变化,都会回调到autofit()函数,随着TextSize大小变化重新设定,通过OnTextSizeChangeListener回调给我们newTextSize 、oldTextSize,AutofitHelper还对外公开了几个代码设置方法,有兴趣可以试试。

AutofitTextView一个自定义TextView,代码并没有什么大的改动,一些方法重载,通过AutoHelper类代理实现,这里就不过多叙述,这里再多提一点,非常重要的一点:

弱引用不能随便用!!

博主在这里为什么提这点呢?且看AutofitLayout项目中的源码

public class AutofitLayout extends FrameLayout {

    private WeakHashMap<View, AutofitHelper> mHelpers = new WeakHashMap<View, AutofitHelper>();

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        TextView textView = (TextView) child;
        AutofitHelper helper = AutofitHelper.create(textView)
                .setEnabled(mEnabled);
        if (mPrecision > 0) {
            helper.setPrecision(mPrecision);
        }
        if (mMinTextSize > 0) {
            helper.setMinTextSize(TypedValue.COMPLEX_UNIT_PX, mMinTextSize);
        }
        mHelpers.put(textView, helper);
    }
}

    public AutofitHelper getAutofitHelper(TextView textView) {
            return mHelpers.get(textView);
        }

一目了然,完全没问题嘛,如果是以前我也一定会这样认为!不过前不久遇到一个同事开发的代码,暴露了一个诡异bug,登录请求回调Callback放入了弱引用,app有不同机型手机出现登录的进度框一直转动没法取消,代码一直都没问题,其他手机都ok,问题出在哪呢?问题还很难复现!几经周折才找到罪魁祸首:弱引用,当Callback实例被回收,函数回调不到Activity主线程,dialog一直无法消失。

下面我们来科普一下弱引用

弱引用(WeakReference):如果一个对象只具有弱引用,那就类似于可有可物的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

相比较于弱引用这种做法,个人更推荐使用类似ViewPager (纯属个人观点,若有错误欢迎指出)

  private List<OnPageChangeListener> mOnPageChangeListeners;

  public void addOnPageChangeListener(OnPageChangeListener listener) {
        if (mOnPageChangeListeners == null) {
            mOnPageChangeListeners = new ArrayList<>();
        }
        mOnPageChangeListeners.add(listener);
    }

以上内容为上午学习所得,分享出来,希望各位朋友喜欢。如果你觉得博主这篇博客还行,还请不吝"❤"一个,谢谢!

交流群初创,欢迎各位加入


Intellij IDEA 提交代码到远程GitHub仓库 1.文章参考自:http://my.oschina.net/lujianing/blog/1807282.设置相关绑定 Settings——Version Control——Git——Path to Git executable——选择你的安装目录Settings ——Version Control——GitHub这边Host:github.com Login:账号 Password:密码 阅读详情

相关推荐

3个国产AI大模型实战:如何用DeepSeek+豆包+千问批量生成高质量测试用例(附完整代码)

本文详细介绍了如何利用DeepSeek、豆包和千问三大国产AI大模型批量生成高质量测试用例的实战方法。通过Python环境配置、多模型SDK安装和统一接口封装,实现高效测试用例生成,并结合结构化提示词设计和多模型结果对比分析,显著提升测试效率和覆盖率。

weixin_29197699的博客 707

android 字体自适应,Android textview自适应宽度自动调整字体大小

public class AutofitHelper {private static final String TAG = "AutoFitTextHelper";private static final boolean SPEW = false;// Minimum size of the text in pixelsprivate static final int DEFAULT_MIN_TE...

weixin_29342901的博客 721

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

AutofitTextView 自动调整文字大小

AutofitTextView

hsc93170 blog 824

逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现

逆概率加权(IPW)是一种用于解释由于非随机选择观测值或人群信息的非随机缺失而造成的缺失和选择偏差的方法。原理:这种方法可以通过对观察值的加权来修正分析,使其具有被选中的概率。IPW是基于这样一个假设,即整个研究人群都有可以预测纳入概率(非遗漏)的个体信息,因此,在考虑到这些信息后,我们可以仅从非遗漏的观察值开始对整个目标人群进行推断。计算的程序如下:首先,我们考虑整个研究人群,用逻辑回归模型计算非失访信息的概率,其中响应是非失访,协变量是其可能的预测因素。每个受试者的权重是由预测概率的倒数给出的。然后使用

Christina 5万+

手把手教你使用HFSS仿真高速差分过孔—上

高速数字电路设计中,信号完整性是一个非常重要的问题。为了使信号保持良好的传输特性,PCB板上的互联线一般都采用均匀传输线,使互联线保持特性阻抗一致性,减少信号反射。然而PCB板上的互联线很多时候避免不了换层的问题,这时候就必须使用过孔。过孔会导致阻抗不连续,进而造成反射,出现信号完整性问题。         当信号传输速率越高,信号前沿越短的时候,过孔引入的信号完整性问题越严重,需要对过孔进行优

a2447944219的博客 2万+

Android textview自适应宽度自动调整字体大小

直接上代码AutofitTextView.Javapublic class AutofitTextView extends TextView implements AutofitHelper.OnTextSizeChangeListener { private AutofitHelper mHelper; public AutofitTextView(Context context) {

xueyunvhai的专栏 5076

从零开始:如何用PSINS工具箱构建你的第一个IMU误差模型

本文详细介绍了如何使用严恭敏教授开发的PSINS工具箱构建IMU误差模型,涵盖从基础参数设置到高级误差建模的全过程。通过imuerrset函数配置陀螺零偏、随机游走等核心参数,并结合实战案例展示消费级MEMS器件的误差建模方法,帮助用户提升惯性导航系统的精度与可靠性。

weixin_29284885的博客 322

安卓AutoFitTextView实例Dmeo分享自适应

一、首先看看运行效果图: 二、主要核心类: 1、AutofitHelper.java 2、AutofitLayout.java 3、AutofitTextView.java 以上为主要核心类,直接在MainActivity.java类里面使用以及布局中使用,详情看代码: AutofitHelper.java package com.exam

Su_tianbiao的专栏 3265

电压跟随器在ADC采样电路中的作用分析

电压跟随器在ADC采集系统中扮演关键角色,它能解决分压电路因ADC输入阻抗导致的电压误差问题。通过运放构成的电压跟随器可隔离信号源与负载,保证采样精度,尤其适用于高阻抗传感器或高速采样场景。工程应用中需注意运放带宽、轨对轨输出能力及抗干扰设计。合理使用电压跟随器能显著提升信号完整性,在复杂电子系统中成为不可或缺的"信号桥梁。

硬核科技 654

YOLOv12改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度(二次改进A2C2f)

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1886

android字体颜色自适应,AutoFitTextView(Android textview根据字体长度调整字体大小)...

public classAutofitHelper {private static finalString TAG= "AutoFitTextHelper";private static final booleanSPEW= false;// Minimum size of the text in pixelsprivate static final intDEFAULT_MIN_TEXT_SIZ...

weixin_42537499的博客 526

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

android studio 使用git需要忽略.idea,android studio 新手入门教程(三)Github( ignore忽略规则)的使用教程图解...

Android Studio 里集成了上传代码到 github 的功能,所以使用上还是很简单的,设置里添加账号并测试,之后就可以很方便地上传代码到 github 了 如果你的项目是使用Android Studio新建的,那么关于 github 基本就没什么问题了。Android Studio新建项目是自带 .ignore 文件的,也就是说默认是使用了忽略规则上传。默认忽略的是*.iml.grad...

weixin_33346418的博客 1065

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Intellij IDEA(Android Studio)好用的插件和软件

好插件有很多,合理利用插件可以提高开发效率,遇到好用的记录下,找到新的就更新 1.Key Promoter X idea的快捷键提醒和快速设置快捷键 如果在idea上无法下载,则在官网下载:http://plugins.jetbrains.com/plugin/9792-key-promoter-x 2.GsonFormat 根据json串生成一个java类,很好用 3.FindBug...

lt的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA集成GitHub

GitHub 是全球领先的代码托管平台,支持团队协作开发。本文介绍了 GitHub 的基本操作:创建远程仓库、配置 SSH 免密登录(推荐使用 Ed25519 算法生成密钥)、本地与远程仓库的交互(推送、拉取、克隆代码)。针对开启二次验证后命令行操作问题,提供了通过生成 Personal Access Token 解决的方案。最后说明如何在 IDEA 中集成 GitHub 账号,并分享项目到远程仓库,推荐使用 SSH 协议避免 HTTPS 网络波动问题。全文涵盖 GitHub 从基础配置到高级安全设置的完整

JunYie的博客 153

如何在AS中导入github中的安卓项目

1.首先下载github中的一个安卓项目:https://github.com/longway777/Android-2019-Demo-CalculationTest 2.然后下载项目的压缩包,解压到纯英文路径下。 3.打开解压后的文件夹。删除.idea文件。、 用记事本打开app->build.gradle,需要更改安卓SDK版本的可以在这里更改。 用记事本打开build.gradle,后面的版本号修改成你以前写项目的Android Gradle Plugin Version,也可以参

weixin_43639786的博客 1539

Android Studio上传Android项目到GitHub(最新)

文章目录前言一、Git 安装配置二、配置GitHub登录信息三、上传项目到GitHub 前言 我们开发过程中提到最多的就是版本控制,以前公司用的是svn,它比较适合开发人数不多的项目,属于集中式开发,而git是分布式版本控制系统,强调的是个体,可以有效高速处理从小到大的项目版本管理。GitHub是代码托管平台,类似这样的还有很多,例如码云等,本文主要讲解如何将Android Studio项目通过Git上传至GitHub以及在此过程中遇到的一些问题解决。在操作过程中需要GitHub账号、Android St

黄小梁的博客 6796

git安装配置教程 IDEA,android studio 使用github&gitee 码云

git 我早就用的滚瓜烂熟了,之所以写这篇文章呢,是因为公司以后代码要用 git进行版本控制 开发。还要我培训一下不会用git的同事(~ ̄▽ ̄)~ 。谁让我是公司硕果仅存的唯一一个用git的人٩(๑&amp;amp;amp;amp;amp;gt;◡&amp;amp;amp;amp;amp;lt;๑)۶ 。 培训这东西嘛,既然都准备培训同事了,那么还不如写篇博客,让同事们 慢慢看咯ヽ(゚∀゚)メ(゚∀゚)ノ 。 进入正题 git下载安装配置 git下载 git 下载 这个是...

知我饭否 2845

android导入github项目,上传Android项目至github的解析

这是一个新的系列的文章,github项目,主要讲解了自己的github项目开源实践,github项目解析等。本文主要讲解了如何将自己的android项目上传至github,相信大家平时在开发过程中为了避免重复造轮子会经常逛一下github查看有没有与需求类似的开源项目,那么github上面的开源项目是如何上传至github上的呢?带着这个疑问,我们开始我们今天的讲解。首先若是需要上传github项...

weixin_42502860的博客 782

Mac下安装配置git/idea连接GitHub

安装软件、配置用户名和密码 (1)登陆git的官网:http://www.git-scm.com/ 。点击如图位置下载即可 (2)下载完成后,如图所示,点击安装即可。 安装好Git后,配置用户名和用户邮箱,以后每次与Git的交互都会使用该信息。 git config --global user.name “your_name” git config --global user.email "...

AthlenaA的博客 5067

上传Android项目至github的解析

首先若是需要上传github项目,必须要有一个github账号,通常都是以邮箱注册的,这里先假设大家都已经有github账号了,若没有,则先去注册,注册地址:https://www.github.com(PS:这年头谁若是没有一个github账号,还真不太好意思说自己是程序员…本文主要讲解了如何上传android项目至github,这是以后我们讲解github项目的基础,了解了这些之后我们就可以将自己的开源项目上传至github上了,O(∩_∩)O哈哈~,万事开头难,加油!

大模型学习路线 1032

IDEA下的scala开发Android应用

主要参考了http://fxthomas.github.io/android-plugin/tutorial/01-getting-started.html 首先clone https://github.com/fxthomas/android-scratch到本地 由于本地没有sbt-android插件,需要在build.sbt中增加以下库 resolvers += Resolver.

daaoke的专栏 3405

图文详解——将github开源项目导入android studio

将github上的开源项目导入as

清风徐来 1898

Android Studio上传项目至github

目录1.Git下载与安装2.Android Studio关联Git3.配置github账号信息4.配置忽略文件.gitnore5.上传项目 1.Git下载与安装 下载地址: windows_64位下载地址 下载完成后,傻瓜式安装即可。 2.Android Studio关联Git 点击File > Settings > Version Control > Git 点击Test,选择...

qq_25844803的博客 481

Android Studio问题解决之引入github开源库

小编也只是新手,对于Android Studio在运行时出现的诸多问题也是相当捉急,使用过Eclipse都知道它可以方便的引入Github中的开源库,因为Github上的程序基本都是使用Eclipse来编写的,那么如何在Android Studio中方便地引用呢,其实也挺简单,我使用的是Android Studio1.2.2,8月3号Android Studio1.3.0的稳定版(stable

zlcnup的博客 3106
上一篇: Idea-深入github Android(二)
下一篇: Idea-深入github Android(四)
AnalyzeSystem
博客等级 码龄11年 204粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值