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/