如何从小部件上的 TextView 获取默认文本大小?

Posted

技术标签:

【中文标题】如何从小部件上的 TextView 获取默认文本大小?【英文标题】:How to get default text size from TextView on widget? 【发布时间】:2015-04-09 06:30:13 【问题描述】:

我有一个带有 TextView 的主屏幕小部件:

<TextView
      android:id="@+id/textView"
      android:layout_
      android:layout_
      android:ellipsize="none"
      android:singleLine="true"
      android:textStyle="bold" />

我需要获取此文本的大小。我正在尝试获取默认 TextView 的大小文本,如下所示:

TextView defaultTextView = new TextView(context);
float sourceTextSize = defaultTextView.getTextSize();

并且 sourceTextSize 包含 21。但这是错误的值,因为如果我使用 remoteViews.setFloat(R.id.textView, "setTextSize", 21) 设置它,它会使我的文本变大。

如何获取小部件上 TextView 的默认文本大小?

【问题讨论】:

【参考方案1】:

实际上 defaultTextView.getTextSize() 以像素为单位返回大小,而 setTextSize(size) 将输入作为 sp,因此您的文本变得更大。因此,不要直接设置文本大小,而是先根据密度进行转换。

float sourceTextSize = defaultTextView.getTextSize();
TextView.setTextSize(sourceTextSize / getResources().getDisplayMetrics().density);

这里,getResources().getDisplayMetrics().density 将返回屏幕密度为-

0.75 - ldpi

1.0 - mdpi

1.5 - hdpi

2.0 - xhdpi

3.0 - xxhdpi

4.0 - xxxhdpi

Screen Density

【讨论】:

除以density 可以获得 dp。要得到sp,需要除以scaledDensity【参考方案2】:

从你的角度来看,你是对的。当您从默认文本视图中获取时,它将返回 sp 值。因为默认的 textsize 格式是 sp。当您将其设置为 21 时,它将设置为像素。所以尺寸随屏幕大小而变化。

尝试使用不同尺寸的设备。

希望你能理解。

【讨论】:

以上是关于如何从小部件上的 TextView 获取默认文本大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Activity 中获取 Widget 的 TextView 的文本?

Android在小部件内获取textView值

如何获取 android TextView 的默认文本颜色?

如何设置宽度等于android上的另一个小部件

如何删除 textView 上的默认填充?

如何获取列表视图选定行的小部件ID