我开发了一个目标 API 为 15 的应用程序。布局包括网格布局。现在,当我将 Target API 更改为 10 时,我遇到了网格布局和另一个元素“空间”的问题。Eclipse 提示我下载 2.3.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
.
接下来,不要<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:+'
}
或者另一种选择是这个第三方向后兼容的实现:
这与 API 级别 3 兼容,如果您需要返回那么远,它还包括 Space 小部件。