2016-04-14 162 views
1

我有一個Xamarin Android項目,我使用尺寸文件爲不同的屏幕尺寸/分辨率指定文本大小,填充,邊距等。Xamarin Android - 從Dimension文件設置TextSize

我注意到,直接在佈局內和代碼內設置值之間存在顯着差異。

例如,如果我添加以下到一個TextView佈局XML

android:textSize="@dimen/nav_tile_text_size"

那麼我會希望得到的結果是相同的代碼

myTextView.SetTextSize(ComplexUnitType.Sp, _context.Resources.GetDimension(Resource.Dimension.nav_tile_text_size))

這樣做

尺寸文件包含以下內容:

<dimen name="nav_tile_text_size">17sp</dimen>

但由此產生的UI顯示,規模一直沒有正確地應用

Emulator Screenshot

缺少什麼我在這裏?

+0

你試過不同的單位嗎?我認爲問題在於sp。 –

+0

@AkshayKulkarni - 雖然文檔在某些區域並不清楚,但使用SP來表示文本大小是明確的,以便它說明用戶應用的任何字體縮放。直接在佈局中設置時,它工作正常。 – DilbertDave

回答

2

那是正確的。您將需要要麼使用

myTextView.SetTextSize(Android.Util.ComplexUnitType.Sp, Resources.GetDimension(Resource.Dimension.nav_title_text_size)/Resources.DisplayMetrics.Density); 

股,其他方式可能會通過電話的密度成倍增加。我親自檢查了這個代碼,它的工作原理

+0

你知道,我認爲這可能是這種情況,但從Android開發者頁面閱讀以下內容我很困惑:「同樣,你應該更喜歡sp(scale-independent pixel)來定義文本大小。sp比例因子取決於用戶設置和系統縮放尺寸與dp相同「。在閱讀DP值時,我不需要進行任何後期處理,所以我不認爲需要SP值 - 也許我還沒有碰到過DP的問題。 – DilbertDave

+0

嗯,我已經在很多設備(mdpi> xxhdpi)上測試了這一點,它肯定確實顯示這是解決方案。儘管使用相同的值設置相同的屬性(TextSize)必須以不同的方式完成,但我發現它很奇怪。這可能是有原因的,但如果這是在某處的文檔中,它會很有用。 – DilbertDave

+0

那麼這是一個異常 - 我已經添加了另一個TextView並設置文本大小如上。當我在Sony Tablet S上運行應用程序(10英寸運行4.0.3並歸類爲xlarge)時,所有三行文本的大小相同!此外,如果我在輔助功能中設置了「大文本」,所有行增加了大小,但第一個(在佈局中設置)現在小於其他兩個(它們都相同,增加,高度)。 – DilbertDave