10

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

これを行うための最も簡単な方法は何ですか?実際の回転グラフィックに@drawable/spinner_white_16は、Androidに付属しているものを使用することを計画していました。

ありがとう。

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

現時点では、ユーザーがボタンをクリックすると、ドローアブル(およびアニメーション)が表示されますが、次の方法でバックグラウンドタスクを完了したら、読み込み中のアニメーションを手動で閉じる必要があります。

_progressButton.stopLoadingAnimation();

これにより、アニメーションがすべて閉じられ、そこにあった以前のテキストが表示されます。アニメーションの進行中にテキストがないことだけが欠けていますが、そのために何かを一緒にハックできると思います。これをもう少し拡張して、のようなものを呼び出して、実行_progressButton.setProgress(10)されるパーセンテージを設定できるようにする予定です。スレッドセーフにすることもできます。

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

于 2013-11-24T16:36:10.877 に答える
4

TextView中央に配置されたとで構成される独自のボタンを作成しますGONE ImageView。クリックした後TextView、左に移動し、ImageViewドローアブルを表示します。

于 2012-11-07T12:18:03.543 に答える