我正在为Android应用程序创建布局,并且到目前为止一直使用sp
(或dp
)中表示的字体大小,以便它们可以针对不同的设备正确缩放。然而,结果与我希望的结果不同。结果是文本在所有设备上具有相同的物理尺寸(以英寸为单位),而我喜欢的是它占据屏幕的相同比例。
目前我的菜单按钮在平板电脑上看起来有点小,但在手机上看起来很大(见截图;虽然它并不能证明手机版本有多糟糕)。
使用px
实际上为我提供了我想要的这些特定设备的结果,但这是因为它们具有相似的分辨率(但是像素密度非常不同)。如果我根据我希望它在这两个设备(大约1,200 x 700)上看到的像素使用像素,而Galaxy S10的出现与Galaxy S3的物理尺寸相同,但分辨率为10,000 x 7,000,那么我的按钮会看起来很小。
如何设置与分辨率无关的字体大小(或任何大小)(不是密度无关的)?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/menubackground"
>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
>
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/singleplayer"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:textSize="50sp"
android:onClick="singleplayer"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/twoplayer"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:textSize="50sp"
android:onClick="twoplayer"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/campaign"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:textSize="50sp"
android:onClick="campaign"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/ai_vs_ai"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:textSize="50sp"
android:onClick="aiVsAI"
/>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:2)
首先,正如您所说,dp(密度无关像素)应该看起来相同&#34;物理&#34;所有设备的大小,无论显示密度如何,而sp(缩放像素)应根据用户偏好进行缩放。因此,它们不适合您尝试做的事情。
如果您不想要不同的布局,但只需要不同的字体大小,则可以使用对这些属性的资源引用。例如,您可以为values
和values-large
:
在values
:
<dimen name="mainMenuOption">50sp</dimen>
在values-large
:
<dimen name="mainMenuOption">80sp</dimen>
然后,在您的布局中,使用:
<Button
android:layout_height="wrap_content"
android:textSize="@dimen/mainMenuOption"
...
大多数(尽管不是全部)属性可以使用对资源的引用。
当然,这并不能实现&#34;分辨率独立性,但它只允许自定义小部件&#34;而不是整个布局取决于设备特性。