it-swarm.com.de

Kann ich den Anmeldetext bei Google bearbeiten?

Ich integriere meine Anwendung mit Google Plus. Ich habe Google Play-Dienste installiert und mich bei meinem Konto angemeldet. Ich könnte auch veröffentlichen und eins für was auch immer ich will.

Mein Problem

Ich kann den Text der Anmeldeschaltfläche nicht ändern.

Mein Code 

<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+" />

Was habe ich versucht? 

  • Zuerst habe ich versucht, diese Zeile zur XML-Datei hinzuzufügen 

    Android:text="Share on Google+"
    
  • Zweitens habe ich versucht, den Text programmgesteuert zu setzen, funktionierte jedoch nicht.

Jede Hilfe wäre dankbar.

Bearbeiten

Wenn dies nicht möglich ist, gibt es eine Möglichkeit, die gleiche Google-Anmeldeschaltfläche für eine andere Schaltfläche zu verwenden?

25
Marco Dinatsoli

Hier ist die Technik, die ich verwendet habe:

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;
        }
    }
}
92
w.donahue

Hier ist der einfachste Weg, den ich verwendet habe:

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

Problem:

Andere Antworten haben eine Problemumgehung erwähnt. Die zugrunde liegende Implementierung der Schaltfläche kann sich jederzeit ändern, wodurch der Code beschädigt wird. Ich fühlte mich unwohl beim Versuch, die Hacks zu benutzen. Für eine saubere Lösung würden Sie denken, dass die Einstellung Android:text in der com.google.Android.gms.common.SignInButton in Ihrer Layoutdatei den Trick erfüllen würde. Es stellt sich jedoch heraus, dass dieses Attribut für SignInButton nicht verfügbar ist.

Ziel

Googles Richtlinien

Aus der Dokumentation schlägt Google vor, eine benutzerdefinierte Schaltfläche zu erstellen, wie unter Anpassen der Anmeldeschaltfläche . Dann empfiehlt es sich, die Branding-Richtlinien zu verwenden, wie unter Sign-In-Branding-Richtlinien beschrieben. Dazu gehören die Verwendung der angegebenen benutzerdefinierten Symbole und Bilder in der Schaltfläche, das Festlegen der spezifischen Textgröße, der Auffüllung und anderer Verhaltensregeln für das Logo. 

Clean Solution:

Wenn Sie nach dem Vorschlag von Google vorgehen, sind einige benutzerdefinierte Arbeiten erforderlich. Ich war dazu bereit, wollte aber etwas wiederverwendbares schaffen, damit andere das nicht noch einmal durchmachen müssen. Deshalb habe ich eine schnelle kleine Bibliothek (4KB) geschrieben, die das tut. Fühlen Sie sich frei, dazu beizutragen, dass alle etwas tun, wenn Sie Probleme finden.

  • Schritt 1: Fügen Sie der app-Modulebene build.gradle-Datei Folgendes hinzu:

    dependencies {
        compile 'com.shobhitpuri.custombuttons:google-signin:1.0.0'
    }
    
  • Schritt 2: In Ihrem XML-Layout haben Sie Folgendes:

    <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>
    

Verwendungszweck

  • Android:text="{string}": Wie üblich, um den Text auf der Schaltfläche festzulegen.

  • app:isDarkTheme="{Boolean}": Zum Wechseln zwischen blauem und weißem Thema für die Schaltfläche. Die Bibliothek behandelt das Ändern der Textfarbe und der Hintergrundfarbe. Es übernimmt auch die Farbänderung beim Drücken der Taste oder beim Klicken der Taste.

Quelle:

Hoffe es hilft jemandem.

11
Shobhit Puri

Android:text funktioniert nicht, da die Anmeldeschaltfläche von Google eine FrameLayout aber keine Button ist.

Da die Texteigenschaft nur für Ansichten gedacht ist, die ein Textformat darstellen, nicht jedoch für ViewGroups, funktioniert Ihre Lösung nicht.

Der einzige Weg, den Sie erreichen können, ist, die TextView in FrameLayout zu definieren, wie durch w.donahue erklärt.

1
Chandra Sekhar

Für Anfänger  

Wenige Abstürze vermeiden.

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

Sie können diese Klasse verwenden, die ich basierend auf der Antwort von w.donahue geschrieben habe, die Sie auf dieser Seite finden können:

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

Ich empfehle, diese @ w.donahue-Annäherung nicht zu verwenden, da mehrere Prinzipien als Open/Close-Prinzip verletzt wurden. Es ist am besten, wenn Sie Ihren eigenen Gesang in Button kostümieren. Wenn Sie eine Dokumentation über den Sing in Google Plus-Button sehen, handelt es sich lediglich um ein FrameLayout mit Textansicht. Unter diesem Link https://developers.google.com/+/branding-guidelines#sign-in-button haben Sie Material, um den Button zu gestalten.

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

}

Das einzig nervige ist, dass selbst Google + Mark mit 9 Patch-Erweiterungen die PNGs nicht sind, also müssen Sie sie bearbeiten

0
Xenione