这将是一个非常简单的问题,因为我可能已经做了很长时间的错误的事情。 我将通过一个例子介绍我的问题:让我们说设计师为我们的应用程序的屏幕定义以下设计(仅限电话):
然后我将使用以下布局代码实现:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example text"
android:gravity="center"
android:textColor="@android:color/black"
android:textSize="56sp" />
</LinearLayout>
在Nexus 5上看起来很不错,但是当我切换到Nexus One时,我得到了这张照片,这绝对不是我想要的:
所以我的解决方案是:在 / values 和 / values-sw360dp 中定义dimens.xml。然后为文本大小添加维度。 values-sw360dp / dimens.xml 中的大小为56sp, values / dimens.xml中的52sp 当然,当项目变得越来越大时,维度的数量不断上升(我们现在大约有一百个)。当然不仅是文字大小,还有宽度,高度,边距和填充。
最近我得到了一个评论,其中说跟踪所有尺寸只是地狱,因为有时你会忘记编辑一个(比如制作更小的东西),然后它在所有屏幕尺寸上看起来都不错,除了一个。我完全赞同这一点,但想不出更好的解决方案。这是dimens.xml的用途,还是有一种更好的解决方案我还没找到呢?
答案 0 :(得分:0)
我得到这张照片,绝对不是我想要的照片
我猜你的意思是你不希望这个文字被包装成文字。
有没有更好的解决方案我还没有找到?
关于文字大小,欢迎您使用任意数量的图书馆来自动调整字体比例such as AutoSizeTextView
。
关于&#34;边距和填充&#34;,这些通常由维度资源处理,类似于在Web开发中的CSS规则中处理它们。
除此之外,设计流畅的布局(因此您可以硬编码更少的&#34;高度,宽度和#34;)可以处理自动换行(特别是对于事先不可知的文本,例如用户输入的值或从互联网上检索的数据)。
这不仅仅是文字,这只是展示差异的一个很好的例子。
大多数小部件都没有#34;自动换行&#34;作为一种选择;对于那些,你真的需要使用流体布局设计,其中小部件的大小是在运行时从其他规则(wrap_content
,match_parent
,LinearLayout
上的权重,GridLayout
上的跨度规则导出的。 {1}},RelativeLayout
上的固定规则,TableLayout
上的列大小调整规则等。)