26

我开发了一个目标 API 为 15 的应用程序。布局包括网格布局。现在,当我将 Target API 更改为 10 时,我遇到了网格布局和另一个元素“空间”的问题。Eclipse 提示我下载 2.3.3 的支持库,我这样做了……但仍然有问题。

4

3 回答 3

36

GridLayout确实已向后移植以兼容 API 7 级及更高级别。它是(某种)支持库的一部分。下载支持库后,您将在本地 sdk 文件夹中找到一个 Android 库项目,该文件夹位于:

<sdk_folder>\extras\android\compatibility\v7\gridlayout

将其设置为您正在处理的项目的依赖项。之后,您需要将整个项目中的引用从 15 级版本更改为此兼容性版本,以支持 ICS 之前的设备。在布局文件中,将您的 xml 从 GridLayout 更改为 android.support.v7.widget.GridLayout。用法应该是相似的,如果不完全相同的话。

关于Space小部件:我实际上还没有使用过这个小部件,但它似乎可以通过在现有视图上设置边距/填充或添加您自己View的完全透明的通用来替换。

于 2012-04-23T10:16:12.397 回答
18

如果使用 Android Studio,一旦你下载了支持库(如@MH。提到的)你必须使用File->Import Module...,然后选择 GridLayout 支持的位置,对我来说位于这里:<sdk_folder>\extras\android\support\v7\gridlayout.

接下来,不要<Gridlayout>在 xml 布局文件中使用,而是使用<android.support.v7.widget.GridLayout>. 这是一个例子:

<android.support.v7.widget.GridLayout
    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="match_parent"
    app:useDefaultMargins="true"
    app:alignmentMode="alignBounds"
    app:columnOrderPreserved="false"
    app:columnCount="4"
>

布局中的元素将引用app而不是android如上所示和子元素中的 GridLayout 属性:

    <TextView
        android:textSize="32dip"
        app:layout_columnSpan="4"
        app:layout_gravity="center_horizontal"
    />

最后,必须将 GridLayout 支持库引用添加到以下dependencies部分\src\build.gradle

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.android.support:gridlayout-v7:+'
}
于 2014-04-08T01:25:48.930 回答
4

或者另一种选择是这个第三方向后兼容的实现:

这与 API 级别 3 兼容,如果您需要返回那么远,它还包括 Space 小部件。

于 2012-04-23T10:20:12.260 回答