无法在不同的屏幕分辨率上缩放文本大小

时间:2016-02-24 22:42:47

标签: java android text scaling text-size

我正在尝试为几种不同的屏幕尺寸设置文字大小和比例。我已在Android Studio中使用以下文件夹设置我的应用程序:

值>梦诗

values-sw320dp>梦诗

值 - sw480dp>梦诗

values-sw600dp>梦诗

values-sw720dp>梦诗

我在AWS Device Farm上测试了我的应用程序,并注意到一些问题。特别是,我正在比较Samsung Galaxy AvantSamsung Galaxy S6。每个设备都在单独的Android版本上运行,而S6具有更高的分辨率。但是,这些设备的物理尺寸接近相同(手持电话)。

我使用以下方法动态设置文字大小:

xAxis.setTextSize(getResources().getDimension(R.dimen.answer_label_text_size));

但是,我注意到在每台设备上,尽管两台设备都在3sp的sw320dp文件夹中拉出了尺寸,但尺寸却大不相同(answer_label_text_size)。

<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="center_indentation">80dp</dimen>
<dimen name="poll_question_text_size">14sp</dimen>
<dimen name="margin_left">80dp</dimen>
<dimen name="margin_bottom">8dp</dimen>
<dimen name="radio_button_answer_text_size">16sp</dimen>
**<dimen name="answer_label_text_size">3sp</dimen>**
<dimen name="answer_value_label_text_size">8dp</dimen>
<dimen name="vote_count_label_text_size_lower_right">17sp</dimen>
</resources>

三星Galaxy Avant(参考&#34;测试答案&#34;左侧标签): enter image description here

三星Galaxy S6 enter image description here

在一天结束时,我如何确保具有相似物理尺寸的设备呈现相同的文字大小?

2 个答案:

答案 0 :(得分:1)

而不是使用

xAxis.setTextSize(getResources().getDimension(R.dimen.answer_label_text_size));

您可以将其更改为

xAxis.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.answer_label_text_size));

答案 1 :(得分:1)

这也让我疯狂。我的启动画面有一个图像,可以使用ImageView的layout.xml参数根据设备分辨率和物理大小进行适当调整。但是,当我在其下面放置一个textview作为标题时,textSize不会随屏幕缩放,因此在不同的设备上看起来非常不同。 (微小的低分辨率大屏幕和大屏幕高分辨率小屏幕)

我找到了一种补偿方法:

 int density=metrics.densityDpi;
 int screenWidth = metrics.widthPixels;
 int screenHeight = metrics.heightPixels;
  //.../
 TextView coverText = (TextView) findViewById(R.id.selectText);
 int txtRes = (int) (10*(screenWidth/density));
 coverText.setTextSize(txtRes);

这为我提供了一个缩放的文本标题,在大型低密度屏幕和小型高密度屏幕上看起来相同。

这很有效。唯一的问题是我的初始大小(在这种情况下为10)是通过反复试验选择的,并且在不同的设备上进行了一些编译和调试。

希望它可以帮助别人。