如何根据屏幕尺寸设置文本大小?

时间:2019-09-24 16:02:30

标签: android font-size text-size density-independent-pixel screen-density

我需要根据屏幕尺寸设置应用程序的所有文本内容。我的意思是按钮,textviews等...例如,如果我在Pixel C平板电脑上执行该应用程序,则按钮的文本大小和textviews的文本大小必须很大,而在320x240的设备中必须很小。

首先,我尝试使用autoSizeTextType,但最后我还是劝阻这种方法,因为它只能应用于TextView,而不能应用于Button等。

之后,我尝试了这种方法:https://developer.android.com/training/multiscreen/screendensities在res文件夹中创建4个文件夹:

values-hdpi
values-mdpi
values-xhdpi
values-xxhdpi

在其中包含一个带有文本大小值的dimens.xml文件,例如,这是values-xhdpi文件夹中的文件:

<resources>
    <dimen name="big_text">35sp</dimen>
    <dimen name="medium_text">25sp</dimen>
    <dimen name="small_text">20sp</dimen>
</resources>

对于其他文件夹,我输入了不同的值进行测试。

它可以工作...但是...不是我要搜索的行为。为什么?因为我在两种不同的xhdpi仿真器(Pixel C和Nexus 4)中执行了该应用程序。PixelC具有更高的分辨率,但是屏幕却非常大,因此两台设备都使用相同的dimens.xml文件,但是按钮和文本如图所示,在Pixel C中显示的尺寸较小,而在Nexus 4中显示的尺寸较大:

enter image description here

我该怎么做才能获得在所有设备中短语占据屏幕相同部分的文本大小值?

2 个答案:

答案 0 :(得分:0)

您在正确的道路上,但应使用最小宽度可用宽度限定词,而不是密度限定词。如您所见,显示器的像素密度实际上与显示器的物理尺寸没有任何关系。

最小宽度限定符是区分屏幕尺寸的“常规”方法。 “最小宽度”可让您保证设备的大小,无论其当前方向如何。

values/           <-- fallback for everything else
values-sw400dp/   <-- modern "large" phones
values-sw600dp/   <-- 7" tablets
values-sw720dp/   <-- 10" tablets

另一方面,可用宽度限定符为您提供了关于当前方向的设备尺寸的保证。也就是说,纵向手机比横向手机的可用宽度要小得多(而纵向/横向手机的最小宽度值将相同)。

values/          <-- fallback for everything else
values-w400dp/   <-- any device that currently has 400dp or more available width
values-w600dp/   <-- 600dp or more available width
values-w720dp/   <-- 720dp or more available width

同样,真正的问题是您是否要针对不同的方向使用相同的文本大小。如果是,请使用最小宽度。如果否(您希望针对不同的方向使用不同的尺寸),请使用可用宽度

答案 1 :(得分:0)

在Android 8.0(API级别26)及更高版本中,您可以指示TextView根据TextView的特征和边界,使文本大小自动扩展或收缩以填充其布局。通过此设置,可以更轻松地优化具有动态内容的不同屏幕上的文本大小。

<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp" />

有关更多信息,请查看官方documentation