根据屏幕大小(手机 vs 平板电脑),Android 可以根据比例自动调整文本和图像的大小。

3
我对px、dp和sp的区别有很好的理解。但问题是,当我在屏幕上放置一个TextView(或ImageView)时,dpi是无关紧要的。在一个高度为3英寸、密度为160dpi的屏幕上,80px的文本大小将是1/2英寸,或者是高度的1/6。在一个高度为7英寸、密度为160dpi的屏幕上,它仍然是1/2英寸,但现在是高度的1/14。
问题在于,使用dp(或sp),在手机上看起来不错的东西,在平板电脑上就不见了。
是否有一种指定分数屏幕大小的方法,比如百分比?

没有一种持续的方法可以做到这一点。我建议重新设计并使用图像 + 文本进入图像的解决方法。 - Siddharth
2个回答

2

我不确定是否可以使用百分比来指定尺寸,但为什么不在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>

问题在于 dp、sp 和 px 都是无关的。如果我想让一张图片的高度为屏幕高度的 1/10,我该如何指定? - EddieRich
是的,谢谢Kamil。我尝试了layout_weight,现在我的图片可以正确缩放了。我会继续寻找文本大小的解决方案。 - EddieRich

1
这将根据密度提供文本大小。
  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
/>

感谢您的回复23imak。看起来我需要像您发布的那样使用Java代码解决方案,可能是在自定义视图中。我希望Android在布局XML中有一种“适合文本到矩形”的属性,但他们没有。 - EddieRich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接