如何设置自定义编辑文本中的最小文本大小?

2024-03-16

我正在使用这个自定义 EditText,它会自动调整 EditText 内的文本大小。它工作得很好,但是,文本在换行之前变得太小了。如何设置最小文本大小?这样只有当文本大小达到 12sp 时才换行

public class FontFitTextView extends EditText {

// Attributes
private Paint mTestPaint;
private float defaultTextSize;

public FontFitTextView(Context context) {
    super(context);
    initialize();
}

public FontFitTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize();
}

private void initialize() {
    mTestPaint = new Paint();
    mTestPaint.set(this.getPaint());
    defaultTextSize = getTextSize();
}

/* Re size the font so the specified text fits in the text box
 * assuming the text box is the specified width.
 */
private void refitText(String text, int textWidth) {

    if (textWidth <= 0 || text.isEmpty())
        return;

    int targetWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();

    // this is most likely a non-relevant call
    if( targetWidth<=2 )
        return;

    // text already fits with the xml-defined font size?
    mTestPaint.set(this.getPaint());
    mTestPaint.setTextSize(defaultTextSize);
    if(mTestPaint.measureText(text) <= targetWidth) {
        this.setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultTextSize);
        return;
    }

    // adjust text size using binary search for efficiency
    float hi = defaultTextSize;
    float lo = 2;
    final float threshold = 0.5f; // How close we have to be
    while (hi - lo > threshold) {
        float size = (hi + lo) / 2;
        mTestPaint.setTextSize(size);
        if(mTestPaint.measureText(text) >= targetWidth )
            hi = size; // too big
        else
            lo = size; // too small

    }

    // Use lo so that we undershoot rather than overshoot
    this.setTextSize(TypedValue.COMPLEX_UNIT_PX, lo);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int height = getMeasuredHeight();
    refitText(this.getText().toString(), parentWidth);
    this.setMeasuredDimension(parentWidth, height);
}

@Override
protected void onTextChanged(final CharSequence text, final int start,
                             final int before, final int after) {
    refitText(text.toString(), this.getWidth());
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if (w != oldw || h != oldh) {
        refitText(this.getText().toString(), w);
    }
}

}

<com.your.package.activity.widget.FontFitTextView
android:id="@+id/my_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="My Text"
android:textSize="60sp" />

您只需要将值更改为lo

// adjust text size using binary search for efficiency
float hi = defaultTextSize;
float lo = 2;

例如:

// adjust text size using binary search for efficiency
float minTextSize = defaultTextSize / 2;
float hi = defaultTextSize;
float lo = minTextSize;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置自定义编辑文本中的最小文本大小? 的相关文章

  • RecyclerView 未显示列表中的所有项目

    我在用RecyclerView在我的应用程序中 每次我打开屏幕时 我只能看到一项 但当我调试时 它每次都会出现onBindViewHolder method 这是我的适配器 Override public ViewHolder onCrea
  • “此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。” -反应-原生

    当我尝试运行反应本机应用程序时 我遇到此错误react native run android 我无法安装该应用程序 我正在尝试构建一个相机应用程序 我当前的react native版本 0 62 0 React cli版本 2 0 1 De
  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • Android平台源码中哪里可以找到版本信息

    Android 平台源文件中的版本信息在哪里找到 我尝试查找 设置 gt gt 中列出的有关手机的一些信息 显示的一些信息包括固件版本 模块编号 基带版本 内核版本 你可以给它办理登机手续platform build core versio
  • Android:如何从输入流创建 9patch 图像?

    我使用下面的代码实例化 9patch 图像并将其设置为按钮的背景 下图显示了不理想的结果 InputStream MyClass class getResourceAsStream images btn default normal 9 p
  • IntentService、Service 或 AsyncTask

    实现这一点的最佳方法是什么 我有一个 Android 应用程序 它将使用我的 python 服务器来允许两部手机之间进行轮流通信 回合意味着他们在一轮开始之前不能互相交谈 一旦他们发送一条消息 他们就不能发送另一条消息 直到对方做出回应 然
  • 无法找到/下载 AppCompat-v7:23.1.1

    怎么了 我遇到了很多 找不到 appcompat v7 23 1 1 的问题 许多解决方案都不起作用 经过几个小时的思考和寻找答案 我遇到了一个奇怪的问题 I have gotAndroid 支持库 23 1 1 已安装 所有功能 exce
  • 取消通知

    我使用Onesignal推送通知 需要取消所有onPause和onResume的通知 NotificationManager notificationManager NotificationManager getApplicationCon
  • 如何在虚拟机 VirtualBox 上运行 Android-x86 4.2 iso?

    我想用Android x86测试和调试我的应用程序 我之前成功尝试过其他版本的Android x86 但是关于android x86 4 2有一个错误 所以我在这里问我的问题 因为它可能会发生在其他人身上 我安装了oracle VM vir
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • Android 发布到 facebook 墙,stream.publish 几天来就中断了

    我有很多使用 FB android sdk 发布的应用程序 github com facebook facebook android sdk 我所有使用 FB 的应用程序几天后就停止工作了 这必然是 FB 方面的更改或错误 因为我的应用程序
  • Android - 正确使用 invalidateOptionsMenu()

    我一直在寻找很多invalidateOptionsMenu 我知道它的作用 但我想不出这种方法在现实生活中有用的任何例子 我的意思是 例如 假设我们要添加一个新的MenuItem to our ActionBar 我们可以简单地获取菜单on
  • 使用 Glide 库设置图像加载完成后进度条的可见性

    您好 我想要一个图像进度条 该进度条将在图像加载时显示 但当图像加载完成时 我想将其设置为消失 早些时候我为此使用了毕加索库 但我不知道如何将它与 Glide 库一起使用 我知道有一些资源就绪功能 但我不知道如何使用它 谁能帮我 毕加索图书
  • 确定视图是否在屏幕上 - Android

    我对这个有点困惑 首先也是最重要的是 以下链接很有用 但是我提出了一些可见性问题 链接 检查视图可见性 https stackoverflow com questions 4628800 android how to check if a
  • 如何在 Android 中保存 Edittext 中的文本而不丢失文本的粗体、斜体等功能

    我想做的就是从 Edittext 中获取文本 该文本具有粗体和斜体等功能 并将其保存在文本文件中 但是当我读回并显示它时 这些功能丢失了 它们不显示 如何通过将文本保存在文本文件或任何文件中来保持丰富的功能 您可以使用Html toHtml
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • 当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 时它不起作用

    当我使用 ListView 时 ListTile OnTap 正在工作 但是当我使用 ListWheelScrollView 时它不起作用 我的意思是它不会被窃听 观点发生变化 但我似乎无法点击它 我在很多地方和链接中寻找解决方案 但仍然找
  • firebase中按范围查询

    我有一个食品价格范围滑块 根据滑块的最小值和最大值 我想显示此范围内的食品 滑块代码 multiSlider setOnThumbValueChangeListener new MultiSlider SimpleChangeListene
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr

随机推荐

  • 这个编码字符串表示什么?您是如何发现的?

    我正在尝试建立一个产品目录 但我不知道它在做什么 我想看看里面 有人能弄清楚如何打印源代码并告诉我怎么做吗 FZrHbutatkV pXpVF2wwJ1S4YBZzjp0HRjGIOfPrH0 LgGFL5OZac45h e efvf5RH
  • 使用 StateFlow 和分页的 Android MVI 3

    我正在尝试使用状态流和分页 3 来实现 android MVI 架构 但是当我有一个包含分页数据的视图状态时 我感到很困惑 问题是我将视图模型中的视图状态公开为状态流对象 但现在在该视图状态内我有另一个来自分页库的流对象 状态流中可以有一个
  • 如何使用 Meteor 公开 RESTful Web 服务

    您将如何使用 Meteor 创建一个安静的 Web 服务 我想在 Appcelerator 中创建连接到同一后端的应用程序 Meteor 能解决这个问题吗 我在 Meteorpedia 上写了一篇完整的文章 http www meteorp
  • Entity Framework(EF5) 支持 XML 数据类型吗?

    我正在考虑在 SQL Server 2008 R2 中使用 XML 数据类型 同时也将 EF 与 MVC 结合使用 EF5 支持 XML 数据类型吗 如果没有 那么我将不得不选择不同的数据库设计 非常感谢 EF 目前不原生支持 Xml 类型
  • EJB 3.1 API 的 Maven 存储库

    我可以使用什么 Maven 存储库来实现 EJB 3 1 API 依赖项 这种对中央的依赖起了作用
  • 在哪里可以找到 scala.Any 和 scala.AnyRef 的定义?

    我想跳到 Any 的源代码来看看一些方法是如何实现的 但我发现它没有包含在 scala library src 中 AnyRef 也没有包含在其中 但是值类型和 Nothing 都包含在其中 我很好奇 Scala 对象基类型是如何以及在哪里
  • 如何从父对象获取对象的属性值

    我在这个结构中有对象 obj user name jeterson title I am a test 我有一把有价值的钥匙 user name 我试图获得这样的价值 obj key 意义obj user name 它不起作用 只适用于ob
  • WPF 4 多点触控拖放

    我有一个 WPF 4 应用程序 我使用标准实现了拖放DragDrop DoDragDrop方法 但我使用触摸而不是鼠标事件来做到这一点 我的网格 我正在拖动 的 XAML 如下
  • 如果 proxy_pass 响应中存在 etag,则禁用 gzip

    我是 Nginx 新手 如果 proxy pass 返回 ETag 标头 是否有办法禁用 gzip I E gzip on location foo bar proxy pass http server 123 if upstream ht
  • 通过 try() 之类的方法使 R 命令超时

    我正在并行运行大量迭代 某些迭代比其他迭代花费的时间要长得多 例如 100 倍 我想将这些超时 但我不想深入研究函数 称为 fun c 背后的 C 代码来完成繁重的工作 我希望有类似于 try 的东西 但有一个 time out 选项 然后
  • 最新的 OpenGL 教程或 C++ 书籍 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Websphere 中的 NoClassDefFoundError — 存在 JAR

    我有一个简单的 Spring MVC 应用程序 它从 LDAP 服务器查找一些用户详细信息 并使用 JSP 打印出一个简单的 HTML 页面 该应用程序在 Tomcat 6 上运行良好 它使用 Spring LDAP 1 3 1 和 LDA
  • 将变量传递到 CURLOPT_POSTFIELDS C++

    我正在尝试将变量传递到CURLOPT POSTFIELDS 我当前的代码 size t curl write void ptr size t size size t nmemb void stream std string cmd stat
  • 有没有办法询问 iOS 视图的哪个子视图具有第一响应者状态? [复制]

    这个问题在这里已经有答案了 在 Mac OS X 中 您可以这样找到第一响应者 self window firstResponder 在iOS中有什么方法可以做到这一点吗 或者您是否需要枚举子控件并发送isFirstResponder给每一
  • 如何使用 eclipse Nsight 仅使用一个 GPU 调试 CUDA

    我收到错误 所有 cuda 设备均用于显示 在调试时无法使用 使用Ubuntu 有没有什么方法可以使用 Nsight eclipse 仅使用一个 GPU 进行调试 我见过类似的解决方案 sudo 服务 lightdm 停止 杀死 X 但这也
  • 此版本的ChromeDriver仅支持Chrome版本93

    我有一个 Angular 项目 它使用 puppeteer 运行 Karma 偶尔会出现以下错误 11 13 43 E launcher session not created This version of ChromeDriver on
  • 如何简化三次贝塞尔曲线?

    我有一条三次贝塞尔曲线 由许多段组成 左图 它有一些粗糙的曲率 我需要让它像右图一样平滑 这个问题有点像 降噪 我该如何实现呢 有类似的线程here https stackoverflow com questions 3497694 sim
  • 在 C# 中打印到 LPT1

    如何在 C 中使用文件 LPT1 直接打印到点阵打印机 我用 fopen 在 C 上做到了这一点 但我不知道如何在 c 中做到这一点 非常感谢 在 Windows 中将打印机设置为 通用 仅文本 然后打印到它 这是我用来打印到具有自己的编码
  • UIPickerView iOS7.1 中未定义的键 NSException

    我在 iOS 7 1 模拟器中遇到了 7 0 中未出现的异常 它似乎是在核心的某个地方处理的 因为它只触发异常引发断点 它不会登录到控制台或崩溃 在 UIPickerView 中滚动选项时会发生这种情况 没有可用的有意义的回溯 直接从 UI
  • 如何设置自定义编辑文本中的最小文本大小?

    我正在使用这个自定义 EditText 它会自动调整 EditText 内的文本大小 它工作得很好 但是 文本在换行之前变得太小了 如何设置最小文本大小 这样只有当文本大小达到 12sp 时才换行 public class FontFitT