2012-11-07 15 views
8

私のアプリには大きな「ログイン」ボタンがあります。ユーザーがこのボタンをタップすると、テキストを「ログイン...」に置き換え、中央ではなく左に揃えて、右に回転円を配置します(ただし、ボタンの内側にあります)。私は本質的に私のアプリの他の場所で同じボタンを使用したいですが(初期のテキストと読み込みのテキストが異なります)。Android - ボタンが押されたときにローディング/回転 'ローディング'イメージ付きのボタン

これを行うための最も素敵な方法は何ですか?実際の回転グラフィックでは、Androidに付属の@drawable/spinner_white_16を使用する予定でした。

ありがとうございました。

答えて

9

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

また、ログインが失敗した場合にこれらの変更を元に戻すコードもあります。ここで

3

中央のTextViewGONEImageViewからなる独自のボタンを作成します。クリック後、左にTextViewを移動し、ドロウアブルでImageViewを表示させます。

6

がうまくいけば、その再利用可能な、私が思いついたの実装です:

ProgressButton

現時点では、ユーザーがボタンをクリックすると、それは描画可能な表示(およびアニメーション)になるあなたが、あなたのためにこれはあなたのための任意のアニメーションを却下していた以前のテキストが表示されます

_progressButton.stopLoadingAnimation(); 

:あなたのバックグラウンドタスクを終了したら介して、手動でのローディングアニメーションを却下する必要があります。唯一のことは、アニメーションが進行中の間にテキストがないことが分かりませんが、あなたはそれを一緒にハックすることができると思います。私はこれをもう少し拡張して、_progressButton.setProgress(10)のようなものを呼び出して、実行されるパーセンテージを設定できるようにする予定です。私はそれをスレッドセーフにするかもしれません。

このように、複数のレイアウトを使用したり、ボタンの上にテキストビューを埋め込む必要がなくなり、すべてがあなたのために処理されます。

関連する問題