【问题标题】:Use alternative layout when there's not enough space空间不足时使用替代布局
【发布时间】:2012-08-22 08:02:35
【问题描述】:

我有一个RelativeLayout,里面有很多控件。在某些屏幕上,此布局以及其他屏幕元素可能没有足够的空间。在这种情况下,我想使用一种替代布局,它排除了一些控件并且填充较少。

如何以高效的方式实现这一点?只有当较大的布局绝对不适合时,才应加载较小的布局。我不想使用各种screen size qualifiers,因为布局是否适合是屏幕宽度和高度以及其他可见控件的函数,这似乎太复杂了。

【问题讨论】:

  • 您知道进行完整布局所需的最小尺寸(以 px 或 dp 为单位的高度和宽度)吗?
  • 我不知道确切的高度。有许多控件,包括一些文本视图(以 sp 为单位),这使确定确切高度变得复杂。另外,我宁愿将测量和布局留给操作系统。

标签: android android-layout


【解决方案1】:

我个人认为您应该使用新的屏幕尺寸限定符。这就是 Android 的设计方式,我认为您应该遵循这些规则。它很可能还会使整个开发过程变得更加容易!


但如果你坚持自己做,我能想到的“硬编码”它的唯一方法是这样的:

第一步:获取屏幕尺寸

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

或者如果您的目标是较低的 API 级别:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

第 2 步:根据屏幕尺寸选择替代布局

if(width < value_x_small && height < value_y_small){
        setContentView(R.layout.main_small);

} else if(width > value_x_small && height > value_y_small){
        setContentView(R.layout.main_large);

} else {
        setContentView(R.layout.main_larged);

}

此代码允许您根据屏幕大小(以 px 为单位)选择自己的资源。将 px 值转换为 DP (DPI) 并使用它们来做出决定可能会更好。您可能还想添加对当前屏幕方向的检查。

【讨论】:

  • 你是对的,使用屏幕尺寸限定符是一个更好的主意。在onMeasure 方法中,我可以检测到我应该使用较小的布局,但此时我无法更改它。使用屏幕尺寸限定符时,我可能会次优地选择较小的布局,但没关系。
【解决方案2】:

您可以将控件实现为单独的Fragments,并根据屏幕大小定位它们。这里有更多关于Fragments and their Design Philosophy 的信息。

【讨论】:

  • 我知道碎片。这个问题是关于视图和布局的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 2017-12-08
相关资源
最近更新 更多