【问题标题】:Responsive layout in AndroidAndroid中的响应式布局
【发布时间】:2017-09-05 12:42:25
【问题描述】:

我想在 Android 中进行响应式设计,即我需要这样的布局,我将以编程方式添加视图,并且它们会根据屏幕大小调整它们。 例如: 我想在布局中添加 10 个视图 当我添加它们时,如果每行只有三个视图,那么它们会自动调整为四行三列,即

[0,0] [0,1] [0,2]

[1,0] [1,1] [1,2]

[2,0] [2,1] [2,2]

[3,0]

但是和横向模式一样,纵向空间更大

[0,0] [0,1] [0,2] [0,3] [0,4]

[1,0] [1,1] [1,2] [1,3] [1,4]

【问题讨论】:

  • 使用 GridView 显示您的视图
  • 是的,但是如何增加响应能力?
  • 或带有 GridLayout 管理器的 Recyclerview
  • 如您所见,如果视图根据宽度进行调整
  • 响应什么?您的屏幕尺寸不会超过初始布局。可以在 res/layout-land 文件夹文件中进行方向更改

标签: java android xml


【解决方案1】:

Use flexbox layout

builde.gradle添加

dependencies {
...
compile 'com.google.android:flexbox:0.3.0'
}

并在布局 xml 中使用它。即

<com.google.android.flexbox.FlexboxLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:alignItems="center"
    app:alignContent="center"
    app:flexDirection="row"
    app:flexWrap="wrap">

   ...
</com.google.android.flexbox.FlexboxLayout>

【讨论】:

  • 在此布局中,视图不会进入下一行。无论我添加多少视图
  • @Faiq 你做错了什么。也许你必须对flexbox的父布局进行一些修改。
  • 完成!达到了目的!谢谢
  • 有什么办法可以通过占用剩余的现有空间来自动排列视图之间的空间
  • @Faiq 在不知道您的代码的情况下很难给您提示。我还认为您必须提出一个新问题,因为这超出了当前问题。
【解决方案2】:

似乎Flexbox 解决方案对您有用,但是还有另一种方法可以为这个问题提供不同的途径。如果您不知道,您实际上可以定义具有相同名称的不同 XML 布局文件 - 1 用于纵向模式,另一个用于横向模式。

新建布局文件时,在layout目录右击,选择新建>布局资源文件,可以在此处配置方向。在 Available qualifiers 部分,向下滚动到 Orientation 并将其添加到文件中。此时,您将能够选择此布局的方向,如果您将文件命名为与相反方向相同的名称,您的应用程序将自动膨胀适合设备当前方向的视图。 Android Studio 还将了解您在编辑器中选择的不同布局方向,并且您在 Design 选项卡中看到的屏幕将进行相应调整,即横向布局文件将在垂直方向上有更多空间来构建 UI。

请注意,这给应用程序本身增加了一定程度的复杂性,因为需要考虑活动生命周期,因为操作系统现在正在销毁并重新绘制视图,以响应用户何时切换他们设备的方向。

希望这有助于在这种情况下或在您希望根据设备方向完成不同布局的其他情况下!

【讨论】:

  • 感谢您的解决方案!顺便说一句,我猜在 flexlayout 中视图可能会自动销毁?
  • 从来没有使用过弹性布局,所以我不能肯定地告诉你。由于 UI 发生变化,这可能会被破坏 - 我认为它会遵循 Android 架构的其余部分 @Faiq
猜你喜欢
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多