10

我的应用程序上有一个很大的“登录”按钮。当用户点击此按钮时,我想用“登录...”替换文本,将其对齐左侧而不是中心,并在右侧放置一个旋转圆圈(但仍在按钮内)。我想在我的应用程序的其他地方使用基本相同的按钮(但初始和加载文本不同)。

最简洁的方法是什么?对于实际的旋转图形,我打算使用@drawable/spinner_white_16Android 自带的。

谢谢。

4

3 回答 3

13

您可以使用包含 TextView 和 ImageView 的 RelativeLayout 创建自己的按钮。

<RelativeLayout android:id="@+id/login"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    onClick="[yourLoginMethod]" >

    <TextView android:id="@+id/login_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Log In" />

    <ImageView android:id="@+id/login_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/login_text"
        android:visibility="gone" />

</RelativeLayout>

然后在调用任何登录方法时,更改 TextView 的内容,使其与父级右对齐,并将 ImageView 可见性设置为可见。

loginText.setText("Logging In...");
LayoutParams params = loginText.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
loginText.setLayoutParams(params);
loginLoading.setVisibility(View.VISIBLE);

如果登录失败,我还会有一些代码可以逆转这些更改。

于 2012-11-07T13:38:29.470 回答
7

这是我想出的一个实现,希望它可以重用:

进度按钮

目前,当用户单击按钮时,它将为您显示可绘制对象(和动画),但是一旦您通过以下方式完成后台任务,您将不得不手动关闭加载动画:

_progressButton.stopLoadingAnimation();

这将为您关闭任何动画并显示那里的任何先前文本。唯一缺少的是动画正在进行时没有文本,但我认为你可以为此破解一些东西。我计划进一步扩展它,以便它允许你调用类似的东西_progressButton.setProgress(10),然后设置完成的百分比。我什至可以让它线程安全。

这样您就不必使用多个布局并在按钮顶部嵌入任何文本视图,所有这些都为您处理。

于 2013-11-24T16:36:10.877 回答
4

创建您自己的按钮,该按钮由居中的TextView和组成GONE ImageView。单击后TextView向左移动并使ImageView您的drawable可见。

于 2012-11-07T12:18:03.543 回答