Android Studio 不呈现 SignInButton <item> 标记需要 'android:color' 属性

标签 android google-plus

Google SignInButton 未在 Android Studio 的预览 Pane 中呈现。显示错误,我不知道发生了什么。我只想实现 Google 登录,但这使我无法实现。

我的gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'android'

android {
    compileSdkVersion 21
    buildToolsVersion "21.0.0"

    defaultConfig {
        applicationId "com.rleote.googlelogin"
        minSdkVersion 17
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.google.android.gms:play-services:6.1.+'
}

这就是我在 Activity 中引用 SignInButton 的方式:

<com.google.android.gms.common.SignInButton
android:id="@+id/btn_sign_in"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"/>

预览 Pane 中的错误是这样的: 异常详细信息 android.content.res.Resources$NotFoundException:在当前配置中找不到匹配值 0x7FFF001C(解析名称:common_signin_btn_text_dark)的可绘制资源。在 android.content.res.BridgeResources.throwException(BridgeResources.java:699) 在 android.content.res.BridgeResources.getColorStateList(BridgeResources.java:210) 在 com.google.android.gms.common.internal.q.c 在 com .google.android.gms.common.internal.q.a 在 com.google.android.gms.common.SignInButton.a ... 无法为 C:\Users\Rodrigo\Source\Repos\googlelogin\GoogleLogin\app\build\intermediates\exploded-aar\com.google.android.gms\play-services\6.1.71\res\drawable\配置解析器common_signin_btn_text_dark.xml org.xmlpull.v1.XmlPullParserException:二进制 XML 文件第 5 行:标记需要“android:color”属性 ...

由于缺少颜色属性,它似乎无法解析 common_signin_btn_text_dark.xml。但是我没有定义这个drawable。看起来这是来自 Google 服务的组件,为什么会丢失?

感谢您的帮助!

最佳答案

好的,我已经找到解决方法。基本上错误是说明绘图文件没有必需的 android:color 属性。但是,我不想添加自定义颜色。然后拿到绘图文件res\drawable\common_signin_btn_text_dark.xml的路径,看到是这样的:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/common_signin_btn_text_pressed_dark" />
    <item
        android:state_enabled="false"
        android:state_focused="true"
        android:drawable="@drawable/common_signin_btn_text_disabled_focus_dark" />
    <item
        android:state_focused="true"
        android:drawable="@drawable/common_signin_btn_text_focus_dark" />
    <item
        android:state_enabled="false"
        android:drawable="@drawable/common_signin_btn_text_disabled_dark" />
    <item
        android:drawable="@drawable/common_signin_btn_text_normal_dark" />
</selector>

您会注意到没有颜色属性。然后我看到路径 res\color 有几个文件,其中一个是 common_signin_btn_text_dark.xml,包含这个:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:color="@color/common_signin_btn_dark_text_pressed" />
    <item
        android:state_enabled="false"
        android:state_focused="true"
        android:color="@color/common_signin_btn_dark_text_disabled" />
    <item
        android:state_focused="true"
        android:color="@color/common_signin_btn_dark_text_focused" />
    <item
        android:state_enabled="false"
        android:color="@color/common_signin_btn_dark_text_disabled" />
    <item
        android:color="@color/common_signin_btn_dark_text_default" />
</selector>

区别在于颜色标签和不可绘制对象。但是,drawable 也是强制性的。我所做的是将两者“合并”到:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/common_signin_btn_text_pressed_dark"
        android:color="@color/common_signin_btn_dark_text_pressed"/>

    <item
        android:state_enabled="false"
        android:state_focused="true"
        android:drawable="@drawable/common_signin_btn_text_disabled_focus_dark"
        android:color="@color/common_signin_btn_dark_text_disabled"/>
    <item
        android:state_focused="true"
        android:drawable="@drawable/common_signin_btn_text_focus_dark"
        android:color="@color/common_signin_btn_dark_text_focused" />
    <item
        android:state_enabled="false"
        android:drawable="@drawable/common_signin_btn_text_disabled_dark"
        android:color="@color/common_signin_btn_dark_text_disabled" />
    <item
        android:drawable="@drawable/common_signin_btn_text_normal_dark"
        android:color="@color/common_signin_btn_dark_text_default" />
</selector>

如果我做对了或者这应该自动工作,我仍然想要一个解释。这看起来更像是一种变通方法,而不是直接的解决方案。

关于Android Studio 不呈现 SignInButton <item> 标记需要 'android:color' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726298/

相关文章:

android - okHTTP 无法找到可接受的协议(protocol)(android)

android - 通过转换器将多个属性绑定(bind)到一个值

android - 为什么我会收到 "Error Retrieving parent for item: No resource found that matches the given name ' @android :style/Theme. Dialog.Alert'”?

css - Less css - Id with variable, google plus, cover all

javascript - Google+ 登录 - 未捕获的安全错误

java - Android 应用程序中的 Plusclient.connect() 不起作用

ios - 适用于 iOS 的 Google+ SDK 以编程方式添加登录按钮

java - Firebase 检查用户是否被禁用

google-plus - 有没有办法从命令行下载 Google Plus 照片?

Android SQLiteDatabase 插入错误,可能是创建问题