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

问题描述:

我有一个主屏幕小部件的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的默认文本大小?

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

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

这里,getResources()getDisplayMetrics()密度将屏幕返回密度原样

0.75 - LDPI

1.0 - MDPI

1.5 - hdpi

2.0 - xhdpi

3.0 - xxhdpi

4.0 - xxxhdpi

Screen Density

+0

除以'density'让你DP。要获得sp,你需要用'scaledDensity'进行分割。 – 2017-08-14 21:37:17

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

尝试使用不同大小的设备进行实验。

希望你能理解。