如何在 Google 登录按钮中心对齐文本(Android)

5
我正在使用以下代码将Google登录按钮放在我的应用中。但是,按钮中的文本偏离了中心。我该如何使其居中?
<com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:visibility="visible"
        android:layout_marginRight="50dp"
        android:layout_marginLeft="50dp" />

enter image description here


使用谷歌账号登录 - Aditya Vyas-Lakhan
@AdityaVyas-Lakhan的建议不会改变文本的中心,只会使其变长。 - androidguy
5个回答

6
通过使用调试器和反编译的类代码,我注意到:
- SignInButton类在setStyle中设置了真正的按钮。它使用跨进程绑定API来创建某个来自其他库的类,我无法识别该类,也无法找到其反编译的类代码。 - 内部按钮设置了侧面填充,带有G图标的一侧更大。 - G图标通过背景可绘制对象显示,而不是TextView drawableStart。
因此,似乎实际按钮上放了一些手动填充,位于带有G图标的一侧。为什么他们要这样做,我不知道。从上面的内容来看,在XML膨胀后“修复”填充是非常安全的。我认为这在RTL的情况下也是安全的,因为我认为(或者我确信如此,如果这在RTL中出现问题,请有人告诉我)带有图标的侧面填充始终更大:
    loginBinding!!.googleSignInButton.getChildAt(0)?.let {
        val smaller = Math.min(it.paddingLeft, it.paddingRight)
        it.setPadding(smaller, it.paddingTop, smaller, it.paddingBottom)
    }

当然是 Kotlin。


1

最好自己创建一个按钮。我总是更喜欢这种方法,因为我可以根据自己的需求开发任何类型的Google登录按钮。

<RelativeView
 android:height="wrap_content"
 android:width="match_parent"
 android:marginLeft="20dp"
 android:marginRight="20dp">
      <ImageButton
         android:parentRight="true"
         android:id="google_icon"
         android:background="@null"
         android:padding="10dp"/>
      <TextView
         android:id="google_text"
         android:height="wrap_content"
         android:width="match_parent"
         android:centerHorizontal="true"
         android:text="Google Login"
         android:padding="10dp"/>
</RelativeView>

以下是代码的结构,您可以完全使用它来实现您想要的功能。

0

使用自定义视图按钮而不是使用内置按钮。但是您需要遵循指南。即使是Facebook按钮也可以根据我的需求进行自定义。

<RelativeLayout
    android:layout_width="300dp"
    android:layout_height="50dp"
    android:layout_marginTop="10dp"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@drawable/border_radius_white"
    android:clickable="true"
    android:id="@+id/google_signin" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/g_logo"
        android:adjustViewBounds="true"
        android:layout_gravity="center_vertical"
        android:padding="12dp"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:typeface="normal"
        android:textSize="@dimen/log_button_size"
        android:text="@string/text_sign_in_with_google"
        android:textStyle="bold"
        android:textColor="@color/scGrey"/>

</RelativeLayout>

-1
一个简单的方法是在文本后面添加空格,这样就可以解决这个问题。所以,不要写成:

android:text="Connect with Google"

而应该写成:

android:text="Connect with Google_____________"

将下划线替换为空格 但是,这种方法只适用于使用自定义按钮“com.shobhitpuri.custombuttons.GoogleSignInButton”的情况。

-2

使用gravity来固定文本的中心:

<com.google.android.gms.common.SignInButton
  ......
  android:gravity="center_vertical|center"
  ...... />

1
目前这个没有任何作用。SignInButton 继承自 FrameLayout。可能是之前的更改? - androidguy
SignInButton is FrameLayout which doesn't recognize android:gravity - Islam Salah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接