2012-11-07 143 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),然後設置完成的百分比。我甚至可以讓它安全。

這樣你就不必使用多個佈局,並且在按鈕上面嵌入了任何文字視圖,它的全部都是爲你處理的。