我非常了解px,dp和sp之间的区别。 问题是,当我在屏幕上放置TextView(或ImageView)时,dpi是无关紧要的。 在具有160 dpi的3英寸高屏幕上,80px的文本大小将是1/2英寸,或高度的1/6。在具有160 dpi的7英寸高屏幕上,它仍然是1/2英寸,但现在是高度的1/14。
问题是,使用dp(或sp),手机上看起来不错的东西会在平板电脑上消失。
有没有办法指定小数屏幕大小,例如百分比?
答案 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
/>