2016-04-14 170 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