android.support.v7.widget.GridLayout 无法正常工作

25

我有一个Android项目,大部分菜单和屏幕都使用GridLayout。问题在于,GridLayout只支持API 14及以上版本。

因为我想使应用程序也可用于旧版本的Android,所以尝试使用Android自己的Support Library GridLayout,该库可提供API 7及更高版本的支持。

这正是我所需要的,但无论如何我就是无法让它起作用。我已经尝试了所有这些解释和想法:

  1. Android官方说明
  2. 解决方案1
  3. 解决方案2
  4. 解决方案3
  5. 解决方案4
  6. 解决方案5

等等...

无论我做什么,怎么做,或者使用哪个IDE(无论是Eclipse ADT还是Android Studio),它总是在Layout XML中给我一个错误,大致如下:

The following classes could be instantiated:  - android.support.v7.widget.GridLayout

With either one of these exceptions showing in the error log:

1. android.content.res.Resources$NotFoundException: Could not resolve value 0x7F080000
2. java.lang.classnotfoundexception: android.support.v7.gridlayout.R$dimen

编辑:供参考,这是我用来创建支持网格布局的代码(直接从Android示例程序中获取):

<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="wrap_content"
    android:background="@drawable/blue"
    android:padding="10dip"
    app:columnCount="4"
    >
    <TextView
        android:text="@string/string_test"
    />
    <EditText
        app:layout_gravity="fill_horizontal"
        app:layout_column="0"
        app:layout_columnSpan="4"
    />
    <Button
        android:text="@string/button_test"
        app:layout_column="2"
    />
</android.support.v7.widget.GridLayout>

我到底做错了什么,以至于上述解决方案都无法奏效?我是否漏掉了什么,或者我的原始代码存在问题?

感谢任何帮助。


@nsvir - 我添加了我的XML代码,虽然没有什么特别的地方,但我使用了Android提供的示例代码。 - user475680
5个回答

52

尝试使用Gradle,然后在你的build.gradle文件的末尾添加以下部分:

dependencies {
  implementation 'com.android.support:gridlayout-v7:28.0.0'
  implementation 'com.android.support:appcompat-v7:28.0.0'
}

然后执行 assembleDebug Gradle 任务。


1
这应该是被接受的答案。在ADT(Eclipse)中导入v24 appcompat及更高版本将无法工作。构建工具不再存储ADT兼容库,并且从.aar中提取过于繁琐 - 考虑迁移到Android Studio和基于Gradle的构建系统。 - milosmns
1
从Android Studio 3.0开始,不再使用“compile”,而是使用“implementation”。 - Sisir

4

我正在使用的代码没有使用gradle(尝试通过eclipse创建一个gradle时会显示错误并且不执行任何操作),我看到了这个解决方案,但由于我没有使用gradle,它不可行。 - user475680
你重启了你的IDE吗? - nsvir
是的,多次尝试过。试图创建许多新项目进行测试,但都没有成功。 - user475680
我在Android Studio和Eclipse上尝试导入appcompat和/或gridlayout,但对我来说都不起作用。抱歉。 - nsvir
无论如何,感谢您的帮助。 - user475680

3

对于当前稳定版本1.0.0: 要添加一个对GridLayout的依赖,你必须将Google Maven仓库添加到你的项目中。 在你的应用程序或模块的build.gradle文件中添加所需构件的依赖项:

dependencies {
    implementation "androidx.gridlayout:gridlayout:1.0.0"
}

这有 bug,给我造成了很多问题 :. gradle\caches\transforms-2\files-2.1\834d222cdf56ff4579f6f997b4d0229f\gridlayout-1.0.0\res\values\values.xml:3:5-73:25: AAPT:错误:此处先前已定义资源。 - joghm

2

1
在我的情况下,我通过设置来解决它:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />

在gridlayout_v7项目的清单文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接