2014-11-01 35 views
1

这将是一个非常简单的问题,因为我可能长期以来一直在做错误的事情。 我会介绍我的问题用一个例子:比方说,设计人员定义我们的应用程序(仅适用于手机)的屏幕下面设计:我滥用dimens.xml吗?

enter image description here

,然后我会跟下面的布局代码实现:

<?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的,我得到这个画面,这绝对不是我想要的东西:

enter image description here

所以我对这个解决方案是:在定义dimens.xml两/值,并在/价值观sw360dp。然后为文本大小添加一个尺寸。在该尺寸将56sp在价值观sw360dp/dimens.xml和52sp在值/ dimens.xml 当然,当项目变得越来越大,梦诗量只是不断上升(我们对现在有一百个)。当然不仅是文本大小,而且宽度,高度,边距和填充也是如此。最近我收到了一条评论,其中说跟踪所有维度只是地狱,因为有时候你会忘记编辑一个(比如制作更小的东西时),然后在除了一个之外的所有屏幕尺寸上看起来都很不错。我完全同意这一点,但不能想出更好的解决方案。这是dimens.xml的用途,还是有更好的解决方案,我只是没有找到呢?

+0

关于文本大小,欢迎您使用任意数量的可自动调整字体比例的库[例如'AutoSizeTextView'](https://android-arsenal.com/details/1/473) 。 关于“边距和填充”,这些通常由维度资源处理,类似于在Web开发中的CSS规则中处理它们。除此之外,设计流体布局(因此您可以硬编码更少的“高度,宽度”),可以处理单词换行(特别是对于事先不可知的文本,例如用户输入的值或从Internet检索到的数据)。 – CommonsWare 2014-11-01 20:03:42

+0

这不仅仅是文字,这只是一个很好的例子来展示它的不同之处。通过说*那些通常由维度资源处理*,你的意思是dimens.xml,或其他? – 2014-11-01 20:17:03

+0

尺寸资源是'res/values * /'文件中的''元素。按照惯例,该文件被命名为'dimens.xml',但它不一定是。 – CommonsWare 2014-11-01 20:18:38

回答

0

我得到这个画面,这绝对不是我想要的东西

我要猜你的意思是你不想要这个文本是自动换行。

有没有更好的解决方案,我只是没有找到呢?

对于文字大小,欢迎您使用任意数量的库,可以自动调节字体放大,such as AutoSizeTextView的。

关于“边距和填充”,这些通常由维度资源处理,类似于在Web开发中的CSS规则中处理它们。除此之外,设计流体布局(所以你可以硬编码更少的“高度,宽度”),可以处理单词换行(特别是对于事先不知道的文本,例如用户输入的值或从互联网)。

这其实不只是文字,这只是一个很好的例子,展示了它的不同之处。

大多数小部件没有“自动换行”作为选项;对于那些,你真的需要使用流体布局设计,其中部件的大小是在运行时从其他规则导出的(wrap_content,match_parent,权重LinearLayout,跨度规则GridLayoutRelativeLayout上的锚定规则,TableLayout上的列大小规则等)。