我可以编辑Googleloginbutton的文字吗?

我正在整合我的应用程序与谷歌加。 我已安装谷歌播放服务,并login到我的帐户。 此外,我可以发布,加上一个我想要的。

我的问题

我无法更改loginbutton的文本。

我的代码

<com.google.android.gms.common.SignInButton android:id="@+id/share_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Share on Google+" /> 

我试过了什么?

  • 首先,我尝试将这一行添加到XML

     android:text="Share on Google+" 
  • 其次,我尝试以编程方式设置文本,但它不起作用。

任何帮助,将不胜感激。

编辑

如果这是不可能的,有什么办法,所以我可以使用另一个button上的相同的谷歌loginbutton?

  • Android HTTPlogin问题
  • 如何提供login凭据的自动化androidtesting?
  • Androidlogin - 最佳实施
  • GoogleSignInResult使用Firebase在Android应用中返回DEVELOPER_ERROR
  • Androidlogindevise和开发 - 方法和最佳实践
  • 如何避免按下后退button/键返回到login布局?
  • Android检查用户login之前,否则启动login活动
  • 这个应用程序没有configurationAndroid密钥散列。 - 使用Facebook SDK进行login
  • 这是我使用的技术:

     protected void setGooglePlusButtonText(SignInButton signInButton, String buttonText) { // Find the TextView that is inside of the SignInButton and set its text for (int i = 0; i < signInButton.getChildCount(); i++) { View v = signInButton.getChildAt(i); if (v instanceof TextView) { TextView tv = (TextView) v; tv.setText(buttonText); return; } } } 

    这是我使用的最简单的方法:

      TextView textView = (TextView) signInButton.getChildAt(0); textView.setText("your_text_xyz"); 

    问题:

    其他答案提到了一个解决办法。 但是,我觉得使用黑客时感到不舒服。 对于一个干净的解决scheme,你会认为在你的布局文件中设置com.google.android.gms.common.SignInButton上的android:text就可以了。 但事实certificate,该属性不适用于SignInButton

    目标

    Google的准则

    从文档中,Googlebuild议按照自定义loginbutton中所述创build自定义button 。 然后,它build议使用login品牌指南中提到的品牌指南 。 这包括使用button中给定的自定义图标和图像,设置特定的文本大小,填充和其他标志的注意事项。

    清洁(er)解决scheme

    按照Google的build议做一些定制工作。 我愿意这样做,但是想要创造一些可重用的东西,这样别人就不用再经历这个了。 这就是为什么我写了一个快速的小(4KB)库做到这一点。 如果您发现问题,请随时为其提供帮助。

    • 第1步:将以下内容添加到您的app模块级build.gradle文件中:

       dependencies { compile 'com.shobhitpuri.custombuttons:google-signin:1.0.0' } 
    • 第2步:在你的XML布局中,有以下几点:

       <RelativeLayout ... xmlns:app="http://schemas.android.com/apk/res-auto"> <com.shobhitpuri.custombuttons.GoogleSignInButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/google_sign_up" app:isDarkTheme="true" /> </RelativeLayout> 

    用法

    • android:text="{string}" :像往常一样设置button上的文字。

    • app:isDarkTheme="{Boolean}" :在button的蓝色主题和白色主题之间切换。 该库处理文本颜色和背景颜色的变化。 它还处理button按下或button单击时颜色的变化。

    来源

    • GitHub: https : //github.com/shobhitpuri/custom-google-signin-button
    • 博客文章: http : //go.shobhitpuri.com/googlesignin

    希望它可以帮助别人。

    android:text不会工作,因为Google的loginbutton是一个FrameLayout而不是一个Button

    由于文本属性仅适用于表示文本格式的视图,而不适用于ViewGroups,因此您的解决scheme无法正常工作。

    你可以实现的唯一方法就是获取在FrameLayout定义的TextVieww.donahue所解释的。

    对于初学者

    避免less量崩溃。

     try { ((TextView) mGoogleSignOutBtn.getChildAt(0)).setText(R.string.sign_out); } catch (ClassCastException | NullPointerException e) { e.printStackTrace(); } 

    由于暴露了几个原则作为开放/封闭的原则,所以我不采用这些@W.donahue的方法。 最好的select是在自己的button中唱歌。 如果你看到关于在谷歌加单击文件button只是一个frameview和textview。 在这个链接https://developers.google.com/+/branding-guidelines#sign-in-button你有材料来devisebutton&#x3002;

     public class GplusButton extends FrameLayout { private final String logIn="log in with google +"; private final String logOut="log out"; TextView labelTV; public GplusButton(Context context) { super(context, null); } public GplusButton(Context context, AttributeSet attrs) { super(context, attrs); setBackgroundResource(R.drawable.btn_g_plus_signin_normal); addTextLabel(); } public void addTextLabel() { labelTV = new TextView(getContext()); setTextLogIn(); labelTV.setTextColor(Color.WHITE); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER; addView(labelTV, params); } public void setTextLogIn(){ labelTV.setText(logIn); } public void setTextLogOut(){ labelTV.setText(logOut); } 

    唯一令人讨厌的是,即使是带有9个补丁的Google + mark也不是PNG,所以你必须编辑

    你可以使用这个类,根据你可以在这个页面find的w.donahue的答案w.donahue

     import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import com.google.android.gms.common.SignInButton; public class GoogleLoginButton extends FrameLayout implements View.OnClickListener{ private SignInButton signInButton; private OnClickListener onClickListener; public GoogleLoginButton(Context context) { super(context); init(); } public GoogleLoginButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public GoogleLoginButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { signInButton = new SignInButton(getContext()); signInButton.setSize(SignInButton.SIZE_STANDARD); setGooglePlusButtonText(signInButton, "Test"); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER; addView(signInButton, params); } protected void setGooglePlusButtonText(SignInButton signInButton, String buttonText) { // Find the TextView that is inside of the SignInButton and set its text for (int i = 0; i < signInButton.getChildCount(); i++) { View v = signInButton.getChildAt(i); if (v instanceof TextView) { TextView tv = (TextView) v; tv.setText(buttonText); return; } } } @Override public void setOnClickListener(OnClickListener onClickListener) { this.onClickListener = onClickListener; if(this.signInButton != null) { this.signInButton.setOnClickListener(this); } } @Override public void onClick(View v) { if(this.onClickListener != null && v == this.signInButton) { this.onClickListener.onClick(this); } } }