Настроить Google SignInButton в Android

Я хочу настроить кнопку входа в Google в Android. В настоящее время у меня есть очень простой макет по умолчанию, используя следующий код.

<com.google.android.gms.common.SignInButton
            android:id="@+id/sign_in_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

Меня не устраивает текущая раскладка кнопок. Можно ли обновить текст кнопки, цвет фона в кнопке по умолчанию, или я должен создать полный настраиваемый макет кнопки?

Спасибо.

ps: я новичок в Android


person user1590595    schedule 16.05.2017    source источник
comment
Вы можете создать желаемую настраиваемую кнопку и установить для нее прослушиватель щелчков для выполнения события щелчка на SignInButton с помощью mSignInButton.performClick (). Для получения дополнительной информации перейдите по этой ссылке.   -  person Jay    schedule 16.05.2017
comment
Это не работает для Google BTN, но для Facebook это доза. Есть идеи для Google?   -  person Nastromo    schedule 10.06.2018
comment
stackoverflow.com/questions/18040815/ ответ может быть полезен для простой настройки текста и темы кнопки и рекомендованным Google способом.   -  person Shobhit Puri    schedule 27.06.2019


Ответы (4)


Это очень просто, вам нужно это сделать

<Button
 android:id="@+id/button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerHorizontal="true"
 android:text="@string/common_signin_button_text_long" />

Вы можете настроить кнопку, но вам нужно будет убедиться, что вы следуете руководящие принципы. Изменить: ознакомьтесь с настраиваемой кнопкой входа в этой библиотеке

Если вы хотите сделать это самостоятельно, вы можете создать линейный макет и добавить изображения.

person Dishonered    schedule 16.05.2017
comment
Есть идеи, как добавить значок Google слева от кнопки? Я много боролся. Спасибо - person user1590595; 16.05.2017
comment
Я обновил ответ. Если вы найдете мой ответ полезным, примите его и проголосуйте за него. - person Dishonered; 16.05.2017

Я думаю, вам нужно делать это прагматично, а не xml что-то вроде этого

public static void customizeGooglePlusButton(SignInButton signInButton) {
    for (int i = 0; i < signInButton.getChildCount(); i++)
    {
        View v = signInButton.getChildAt(i);

        if (v instanceof TextView)
        {
            TextView tv = (TextView) v;
            tv.setText("My Text");
            tv.setAllCaps(true);
            tv.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0);
            //here you can customize what you want  
            return;
        }
    }
}

другой способ, но не такой безопасный

TextView textView = (TextView) signInButton.getChildAt(0);
//Customize here
person sushant gosavi    schedule 16.05.2017

По сути, Google SignInButton - это FrameLayout, вы можете настроить его по своему усмотрению, но при этом потребуются некоторые динамические настройки.

Часть XML, добавляющая пользовательский фон в макет фрейма, создайте свой собственный.

  <com.google.android.gms.common.SignInButton
                    android:id="@+id/google_signIn"
                    android:layout_width="match_parent"
                    android:background="@drawable/google_bottun_bg"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="5dp">

                // google image logo
                <ImageView android:layout_width="16dp"
                           android:layout_height="16dp"
                           android:layout_gravity="center_vertical"
                           android:layout_marginLeft="12dp"
                           app:srcCompat="@drawable/ic_gmail"/>
  </com.google.android.gms.common.SignInButton>
  1. внутри FrameLayout у нас есть textView, чтобы вы могли при необходимости переделывать текстовое представление

      fun reDesignGoogleButton(signInButton: SignInButton, buttonText: String) {
             for (i in 0 until signInButton.childCount) {
              val v = signInButton.getChildAt(i)
              if (v is TextView) {
               v.text = buttonText //setup your text here
               v.setBackgroundResource(android.R.color.transparent) //setting transparent color that will hide google image and white background
               v.setTextColor(resources.getColor(R.color.white)) // text color here
               v.typeface = Typeface.DEFAULT_BOLD // even typeface 
               return
                 }
              }
           } 
    

    Удачного кодирования

просмотреть результаты

person Salman_Zach    schedule 24.01.2019

Никакой библиотеки не нужно. Хороший трюк состоит в том, чтобы создать полностью custom layout, затем поместить google btn в этот макет и установить width и height родительский элемент для Google Sign in Button, затем установить видимость для Google Btn = 0, а затем в

googleSignInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                googleLayoutCustom.setPressed(true);
                Intent signInIntent = mGoogleSignInClient.getSignInIntent();
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });

Таким образом, Google Sign In btn будет поверх всех макетов, а ваш пользовательский макет будет выполнять сенсорную рябь при нажатии google btn.

P.S убедитесь, что вам нужно реализовать эффект пульсации касания с любыми цветами, которые вы хотите в своем рисовании. Пример:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorMain">

    <item
        android:id="@android:id/mask"
        android:drawable="@android:color/white" />

</ripple> 
person Nastromo    schedule 10.06.2018