我可以编辑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?

Solutions Collecting From Web of "我可以编辑Googleloginbutton的文字吗?"

这是我使用的技术:

 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); } } }