私のアプリケーションをグーグルプラスと統合しています。 Google Playサービスをインストールし、アカウントにサインインしました。また、私はこれまでに公開したり、プラスしたいものがあります。
サインインボタンのテキストを変更できません。
<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+"
第二に、プログラムでテキストを設定しようとしましたが、うまくいきませんでした。
任意の助けをいただければ幸いです。
それが不可能な場合、別のボタンで同じGoogleサインインボタンを使用できるようにする方法はありますか?
私が使用した手法は次のとおりです。
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");
問題:
他の回答では回避策が言及されています。ボタンの基になる実装はいつでも変更される可能性があり、コードが破損する可能性があります。ハックを使用しようとすると不快に感じました。クリーンなソリューションを得るには、Android:text
上のcom.google.Android.gms.common.SignInButton
レイアウトファイルでこのトリックを行います。ただし、その属性はSignInButton
には使用できません。
目的
Googleのガイドライン
ドキュメントから、Googleは サインインボタンのカスタマイズ [アーカイブ済み。アーカイブされたページを参照してください here ]。 Sign-In Branding Guidelines で言及されているブランドガイドラインを使用することをお勧めします。これには、ボタンの特定のカスタムアイコンと画像の使用、特定のテキストサイズ、パディング、およびその他のロゴの禁止事項と禁止事項の設定が含まれます。
クリーンソリューション:
Googleの提案に従って行うには、いくつかのカスタム作業が必要です。私はそれをやる気はありましたが、再利用可能なものを作りたいと思ったので、他の人が再びこれを経験する必要はありません。それが、私が簡単な小さな(4KB)ライブラリを作成した理由です。問題が見つかった場合は、皆の利益のために自由に貢献してください。
ステップ1:app
モジュールレベルbuild.gradle
ファイル:
dependencies {
implementation '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}"
:通常どおり、ボタンにテキストを設定します。
app:isDarkTheme="{Boolean}"
:ボタンの青テーマと白テーマを切り替えます。ライブラリは、テキストの色と背景色の変更を処理します。また、ボタンを押すかボタンをクリックすると、色の変更を処理します。
ソース:
それが誰かを助けることを願っています。
Android:text
は、Googleの[ログイン]ボタンがFrameLayout
であるがButton
ではないため機能しません。
テキストプロパティはテキスト形式を表すビューのみを対象としており、ViewGroupsは対象としていないため、ソリューションは機能していません。
達成できる唯一の方法は、w.donahueで説明されているように、TextView
内でFrameLayout
を定義することです。
初心者向け
いくつかのクラッシュを回避します。
try {
((TextView) mGoogleSignOutBtn.getChildAt(0)).setText(R.string.sign_out);
} catch (ClassCastException | NullPointerException e) {
e.printStackTrace();
}
このページにある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);
}
}
}
これらの@ w.donahueアプローチは、オープン/クローズ原則としてのいくつかの原則に違反するため、使用しないことをお勧めします。最善の方法は、独自のサインインボタンをカスタマイズすることです。サインインGoogleプラスボタンに関するドキュメントが表示される場合は、Textviewを備えた単なるFrameLayoutです。このリンクで https://developers.google.com/+/branding-guidelines#sign-in-button ボタンを設計するための資料があります。
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);
}
唯一の迷惑なことは、Google + 9パッチ拡張機能でさえ、PNGがマークされていないため、編集する必要があることです。