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:密码 阅读详情

相关推荐

深入解析Vivado FIFO的Standard与FWFT模式:性能对比与应用场景

本文深入解析了Vivado FIFO的Standard与FWFT两种工作模式的核心差异。通过对比数据就绪时机、读延迟、控制逻辑和有效深度等关键特性,并结合图像处理、数据包转发等典型应用场景,为FPGA设计者提供了清晰的选择依据和实战配置指南,帮助优化数据流性能与设计效率。

weixin_29219189的博客 253

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

电流采样电路设计:差分放大与ADC采集详解

在电机控制、电源管理、电池监测等应用中,电流采样是一个关键环节。通常,我们使用小阻值的采样电阻将电流信号转换为电压信号,再通过运放放大后送入ADC进行采集。本文将详细分析一种基于差分放大器的电流采样电路,包括信号放大、参考电压偏置、滤波保护以及ADC转换计算等内容。

W0s477的博客 2万+

AutofitTextView 自动调整文字大小

AutofitTextView

hsc93170 blog 824

Prometheus+Grafana部署及企业微信邮件/群消息告警通知配置

本文详细介绍了在Ubuntu 22.04系统上部署普罗米修斯监控系统的完整流程。首先说明了系统配置要求(2核CPU、4G内存、100G硬盘),然后分步骤指导下载、解压和安装普罗米修斯服务。文章包含配置prometheus.yml文件、启动服务、设置系统服务等关键操作,并提供了访问9090端口验证服务的方法。接着介绍了通过node_exporter监控Linux主机的配置过程,包括安装、启动服务和修改普罗米修斯配置文件添加监控项。最后还涉及了mysqld_exporter的部署流程,用于监控MySQL数据库服

m0_58761900的博客 1637

KEIL MDK 生成bin文件实战:C51与ARM双平台配置指南

本文详细介绍了在KEIL MDK开发环境中,为C51和ARM双平台自动生成BIN文件的实战方法。针对C51平台,通过srec_cat.exe工具编写批处理脚本并集成到KEIL;针对ARM平台,则利用fromelf.exe工具直接配置。文章还提供了通用脚本方案和路径、变量、版本兼容性等常见问题的避坑指南,帮助开发者高效完成嵌入式程序部署。

weixin_29188997的博客 346

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

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

xueyunvhai的专栏 5076

Oracle21C Windows安装全攻略:从下载到配置环境变量,避开ORA-12514的坑

本文详细介绍了Oracle21C在Windows系统上的安装全流程,包括环境准备、安装包验证、分步安装指南、数据库实例创建与配置、环境变量精准配置等关键步骤,特别针对常见的ORA-12514错误提供了解决方案,帮助用户顺利完成安装并避免常见问题。

ooo22的博客 414

安卓AutoFitTextView实例Dmeo分享自适应

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

Su_tianbiao的专栏 3265

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7828

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 369

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

tsmc12: m0po max length问题(H384.M0_PO.L.1)

手动调整可以挪cell,制造上下两个row相对的至少一个site的空间,通过插普通filler来解决,这里需要注意的是,tsmc12有via0的规则,需要让via0落在via0 grid上。在pt eco之后会有一些m0po max length问题出现,大部分问题都可以通过替换decap来解决,少部分由于局部density过高,需要手动调整。更多学习内容请关注「拾陆楼」知识星球。#ICC2中替换decap的参考脚本。

m0_61544122的博客 789

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

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

weixin_33346418的博客 1065

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IDEA集成GitHub

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

JunYie的博客 153

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何在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、付费专栏及课程。

余额充值