2015-02-09 31 views
1

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

回答

5

實際上,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

1

你是對的,從你的角度來看。當你從默認的文本視圖獲取時,它會返回sp值。因爲默認文本大小格式是sp。當你用21設置它時,它將設置像素。所以尺寸因屏幕尺寸而異。

嘗試使用不同大小的設備進行實驗。

希望你能理解。

相關問題