调整文本以适应屏幕尺寸 - Google Nexus 5 示例。

3
我最近在AWS设备农场上进行了一些测试,惊讶地发现我的文本大小没有适当地缩放。
目前,我为不同的文本大小设置了不同的文件夹:
values
<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">14dp</dimen>
<dimen name="margin_left">80dp</dimen>
<dimen name="margin_bottom">8dp</dimen>
<dimen name="radio_button_answer_text_size">12dp</dimen>
<dimen name="answer_label_text_size">6dp</dimen>
<dimen name="answer_value_label_text_size">8dp</dimen>
<dimen name="vote_count_label_text_size">11dp</dimen>

values-sw600dp
<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">22dp</dimen>
<dimen name="margin_left">160dp</dimen>
<dimen name="radio_button_answer_text_size">14dp</dimen>
<dimen name="margin_bottom">16dp</dimen>
<dimen name="answer_label_text_size">9dp</dimen>
<dimen name="answer_value_label_text_size">10dp</dimen>
<dimen name="vote_count_label_text_size">13dp</dimen>

values-sw720dp
<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">30dp</dimen>
<dimen name="margin_left">185dp</dimen>
<dimen name="margin_bottom">20dp</dimen>
<dimen name="radio_button_answer_text_size">18dp</dimen>
<dimen name="answer_label_text_size">10dp</dimen>
<dimen name="answer_value_label_text_size">12dp</dimen>
<dimen name="vote_count_label_text_size">14dp</dimen>

在每个文件夹中,我创建了一个dimens.xml文件,用于提取给定屏幕的适当文本大小。
我访问了设备度量网站here,并专门查看了Google Nexus 5。看起来Nexus 5在运行模拟器后从我的sw600dp文件夹中提取。我不确定为什么会这样,并且生成的文本大小是我希望在7英寸平板电脑上看到而不是4.5英寸手持设备上看到的大小。
我已经阅读了无数关于StackOverflow的帖子,但找不到任何正确考虑所有设备的方法。我知道有6英寸、7英寸、8英寸、9英寸和10英寸的设备,我想确保我考虑到每个尺寸。
以下是我在Google Nexus 5上的文本外观,注意我指的是radio_button_ansewr_text_size项:

enter image description here


1
你的dimens xml文件中的文本大小值是多少? - Mussa
已编辑以提供特定文件夹尺寸 - tccpg288
1
根据文档,当指定文本大小时,始终使用 sp,请参见此处 - Qandeel Abbassi
1个回答

1
在指定文本大小时,始终使用sp
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" />

或者

<dimen name="text_size">13sp</dimen>

http://developer.android.com/training/multiscreen/screendensities.html

如果您需要在Java代码中设置文本大小,请按照以下方式操作:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);

我认为dimens文件夹不允许使用sp引用,而且我正在以编程方式设置大小。 - tccpg288
我相信在dimens xml文件中将允许使用sp,我已经使用它们多年了,一直都有效 :) - Mussa
它起作用了,对于边距(COMPLEX_UNIT_DIP)是否也适用相同的逻辑? - tccpg288
@tccpg288 不行,这对于边距、填充、宽度和高度是不起作用的,因为Android根据XML文件呈现UI。在程序中编程更改视图将会很麻烦。此外,最好不要在Java代码中更改文本大小,因为文本视图的大小也不会随之改变,因为它是静态的。 - Mussa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接