支持多种屏幕尺寸的文本

时间:2012-11-01 02:35:42

标签: android android-layout dynamic android-emulator

我研究了许多相关主题,但主题主要围绕图像。我理解这一点:http://developer.android.com/guide/practices/screens_support.html但我并没有真正理解为字体动态调整大小。

对于图像没有问题,我使用了ldpi,mdpi,hdpi和xhdpi。但是对于字体,我不知道如何调整它们的大小。任何人吗?

我的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/layoutHeader"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/headerimage"
android:orientation="horizontal">

<TextView
    android:id="@+id/headerTitle"
    android:layout_width ="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:textColor="#FFF"
    android:textSize="28dp"
android:textStyle="bold"
    android:text="Some Random Banner Title"
    style="@style/headerTextStyle"
 />

<ImageButton
    android:id="@+id/btnPlus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="5dp"
    android:layout_marginTop="6dp"
    android:background="#0000"
    android:scaleType="centerCrop"
    android:src="@drawable/plus" />

<ImageButton
    android:id="@+id/btnInfo"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="6dp"
    android:background="#0000"
    android:scaleType="centerCrop"
    android:src="@drawable/info" />

<ImageButton
    android:id="@+id/btnGuide"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_centerVertical="true"
    android:layout_toLeftOf="@+id/btnPlus"
    android:background="#0000"
    android:scaleType="centerCrop"
    android:src="@drawable/guide" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:4)

我会将文本大小放在样式资源中,然后将替代样式资源文件用于屏幕大小..

因此您将拥有res / values-large / style.xml,res / values-small / style.xml等。每个样式都将包含具有不同dp值的文本大小的项目。请记住,hdpi,mdpi,ldpi等与像素密度有关,而与屏幕尺寸无关。

例如,如果在res / values / style.xml中,您有:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="headerTextStyle" >
    <item name="android:textSize">28dp</item>
   ...
</style>
</resources>

在另一个资源文件中,假设是大屏幕(res / values-large / style.xml):

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="headerTextStyle" >
    <item name="android:textSize">46dp</item>
   ...
</style>
</resources>

然后当然将此样式应用于元素,系统将根据设备的屏幕大小选择正确的样式。您可以在同一个文件中提供多个样式,一个用于标题文本,一个用于常规文本 - 无论如何您需要的不同类型的文本,类似于CSS。

或者,您可以在类似限定的资源目录中复制布局文件,例如res / layout-large / layout.xml,res / layout-small / layout.xml,并且每个目录中都有不同的文本大小,但这将是重复的不必要的更多xml。