如何跨设备维护一致的应用布局? 对于一致性,我的意思是比例,可读性,可用性和用户舒适度。
有一段时间我正在为Android做应用程序。所有这些应用程序都是为企业客户制作的每个应用程序都是针对特定手机设计的,因此我从不需要深入掌握布局。
最近,我收到了为所有Android 2.2设备构建复杂应用程序的请求,最高可达5.0。要求包括:ActionBar,滑动菜单,主/细节流,许多片段,许多按钮,地图,列表继续。所以我开始研究。
首先,为了支持上面提到的所有视图,我决定使用appcompat_v7。仅仅因为谷歌成功了。放弃ActionBarSherlock,因为它是第三方库。
在某些情况下,您需要使用其他布局。这可以通过别名轻松完成。
值-大/ aliases.xml
<resources>
<item name="main_layout" type="layout">@layout/main_latyout_large</item>
</resources>
这将生成此代码:
setContentView(R.layout.main_layout);
有效运作
setContentView(R.layout.main_layout_large);
到目前为止一直很好,但后来会看到一些事情正在逃避我。 (见最后)
注意:另一种方法是将 master_layout_large.xml 放置为 layout-large / master_layout.xml 。
一个简单的例子:
布局/ master_layout.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="@dimen/layout_weightSum">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="@dimen/view1_weight"/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="@dimen/view2_weight"/>
</LinearLatyout>
值/ dimens.xml
<resources>
<dimen name="layout_weightSum">1</dimen>
<dimen name="view1_weight">0.2</dimen>
<dimen name="view2_weight">0.8</dimen>
</resources>
此配置允许我轻松更改比例,如下所示:
适用于Android 2.2到Android 3.1
值小/ dimens.xml
<resources>
<dimen name="view1_weight">0.3</dimen>
<dimen name="view2_weight">0.7</dimen>
</resources>
对于Android 3.2及更高版本:
值-sh240dp / dimens.xml
<resources>
<dimen name="view1_weight">0.3</dimen>
<dimen name="view2_weight">0.7</dimen>
</resources>
在How to Support Multiple Screens中说:
可用于提供特定于大小的资源的配置限定符是small,normal,large和xlarge。例如,超大屏幕的布局应该在layout-xlarge /中。 从Android 3.2(API级别13)开始,不推荐使用上述大小组,您应该使用swdp配置限定符来定义布局资源所需的最小可用宽度。
然后在How Android Finds the Best-matching Resource中解释(通过一个例子)资源选择的过程。没有说(或可以找到)的是它如何丢弃弃用的限定词。 (即使这样做)
Q1:我是否应该在需要在所有版本中工作的应用程序中使用这两种方法?
Q2:弃用的资源限定符(小的,正常的等)是否可以匹配非弃用的资源限定符?
注意:这种脚手架技术取自here。
TextViews令人沮丧。没有任何本机支持自动调整大小。 WTF?
但是假设我使用this响应的组件。所以我可以使用相同的方法,尺寸。
layout / other_layout.xml (相关代码)
<myns.AutoResizeTextView
android:id="@+id/title"
android:textSize="@dimen/title_textSize"/>
值/ dimens.xml
<resources>
<dimen name="title_textSize">24dp</dimen>
</resources>
值-XLARGE / dimens.xml
<resources>
<dimen name="title_textSize">64dp</dimen>
</resources>
值-sw600dp / dimens.xml
<resources>
<dimen name="title_textSize">64dp</dimen>
</resources>
与以前相同的问题,事件在这里另一个问题是为每个屏幕显示最佳大小的文本,但是更繁琐,因为根据我的测试,我需要定义维度的许多变体以使其看起来一致的设备。
问题3:如何以简单的方式保持可读性?
我意识到我面对这个项目的方式需要创造多个价值 - 并且考虑到那里的选项数量而成指数地增长。 (查看Providing Alternative Resources)
问题4:我可以做些什么来减少似乎需要我的应用程序的值 - *。
还有其他的消化吗?