【发布时间】:2012-05-03 22:27:14
【问题描述】:
我开发了一个目标 API 为 15 的应用程序。布局包括网格布局。现在,当我将 Target API 更改为 10 时,我遇到了网格布局和另一个元素“空间”的问题。 Eclipse 提示我下载 2.3.3 的支持库,我这样做了……但仍然有问题。
【问题讨论】:
我开发了一个目标 API 为 15 的应用程序。布局包括网格布局。现在,当我将 Target API 更改为 10 时,我遇到了网格布局和另一个元素“空间”的问题。 Eclipse 提示我下载 2.3.3 的支持库,我这样做了……但仍然有问题。
【问题讨论】:
GridLayout 确实已被向后移植以兼容 API 级别 7 及更高级别。它是(某种)支持库的一部分。下载支持库后,您会在本地 sdk 文件夹中找到一个 Android 库项目:
<sdk_folder>\extras\android\compatibility\v7\gridlayout
将其设置为您正在处理的项目的依赖项。之后,您需要将整个项目中的引用从 15 级版本更改为此兼容性版本,以支持 ICS 之前的设备。在布局文件中,将您的 xml 从 GridLayout 更改为 android.support.v7.widget.GridLayout。用法应该相似,如果不相同。
关于Space 小部件:我实际上还没有使用过这个(还),但它似乎可以通过在现有视图上设置边距/填充或添加您自己的通用View 来代替那是完全透明的。
【讨论】:
如果使用 Android Studio,一旦你下载了支持库(如 @MH. 提到的),你必须使用 File->Import Module...,然后选择 GridLayout 支持的位置,对我来说位于这里:<sdk_folder>\extras\android\support\v7\gridlayout。
接下来,不要在 xml 布局文件中使用 <Gridlayout>,而是使用 <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 支持库引用添加到\src\build.gradle 的dependencies 部分:
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile 'com.android.support:gridlayout-v7:+'
}
【讨论】:
或者另一种选择是third-party backwards compatible implementation:
这与 API 级别 3 兼容,如果您需要返回那么远,它还包括 Space 小部件。
【讨论】: