Android根据屏幕尺寸缩放文本和图像(手机与平板电脑)

时间:2014-08-20 14:42:35

标签: android android-layout

我非常了解px,dp和sp之间的区别。 问题是,当我在屏幕上放置TextView(或ImageView)时,dpi是无关紧要的。 在具有160 dpi的3英寸高屏幕上,80px的文本大小将是1/2英寸,或高度的1/6。在具有160 dpi的7英寸高屏幕上,它仍然是1/2英寸,但现在是高度的1/14。

问题是,使用dp(或sp),手机上看起来不错的东西会在平板电脑上消失。

有没有办法指定小数屏幕大小,例如百分比?

2 个答案:

答案 0 :(得分:1)

我不确定您是否可以指定百分比大小,但是为什么不在dimen.xml文件中为屏幕定义不同的维度。对于所有屏幕尺寸,很难使用相同的值dp和sp。

您需要创建不同的dimens.xml不同的资源文件夹

 res/values-ldpi/dimens.xml
 res/values-mdpi/dimens.xml
 res/values-hdpi/dimens.xml

接下来为这些文件添加一些值

 <!-- in values-ldpi/dimens.xml -->
 <dimen name="textSize">25dip</dimen>

 <!-- in values-mdpi/dimens.xml -->
 <dimen name="textSize">20dip</dimen>

最终引用布局文件中的尺寸:

<TextView
    android:layout_toRightOf="@id/at"
    android:layout_below="@id/hw"
    android:textSize="@dimen/textSize"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

修改

如果要将图像的高度设置为屏幕大小的1/10,则需要在视图容器中使用android:layout_weight属性。请查看以下示例。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        >

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/imageView"
            android:background="@drawable/ic_launcher" />
    </LinearLayout>

        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:weightSum="1"
            android:layout_weight="9"
            >
 </LinearLayout>

 </LinearLayout>

答案 1 :(得分:1)

这将根据密度给出textSize。

  TextView text = new TextView(this);
  text.setText("text");
  TextView.setTextSize(16 * getResources().getDisplayMetrics().density);

在values-ldpi,mdpi和hdpi中创建dimens.xml。

<dimen name="textSize">30dip</dimen>
<dimen name="textSize">10dip</dimen>

然后在你的布局中添加它。

<TextView
android:textSize="@dimen/textSize"
    //rest code here
/>