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

Can't Scale Text Size on Different Screen Resolutions

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

值 > 维度

值-sw320dp > 尺寸

值 - sw480dp > 尺寸

值-sw600dp > 尺寸

值-sw720dp > 尺寸

我已经在 AWS Device Farm 上测试了我的应用程序,发现了一些问题。特别是,我正在比较 Samsung Galaxy Avant and the Samsung Galaxy S6。每个设备 运行 都有一个单独的 Android 版本,S6 的分辨率更高。但是,这些设备的物理尺寸接近相同(手持设备 phone)。

我正在使用以下方法动态设置文本大小:

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

但是,我注意到在每台设备上,尽管尺寸是从 sw320dp 文件夹中以 3sp 为两种设备提取的尺寸 (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>

Samsung Galaxy Avant(指左侧"Test Answer"标签):

三星 Galaxy S6

归根结底,我如何才能确保物理尺寸相似的设备呈现相同的文本尺寸?

而不是使用

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

你可以改成

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

这也让我抓狂。我的初始屏幕有一个图像,该图像将根据设备分辨率和物理尺寸使用 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)是通过反复试验选择的,并在不同的设备上进行了一些编译和调试。

希望对其他人有所帮助。