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

时间:2015-02-09 13:40:02

标签: android android-widget textview

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

<TextView
      android:id="@+id/textView"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      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的默认文本大小?

2 个答案:

答案 0 :(得分:6)

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

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

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

0.75 - ldpi

1.0 - mdpi

1.5 - hdpi

2.0 - xhdpi

3.0 - xxhdpi

4.0 - xxxhdpi

Screen Density

答案 1 :(得分:1)

你是对的。当您从默认文本视图获取时,它将返回sp值。因为默认的textize格式是sp。当你用21设置它然后它将设置像素。所以尺寸因屏幕尺寸而异。

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

希望你明白。