2015-12-02 88 views
1

當我點擊其中一個按鈕(忘記了您的代碼?或勾選框)時,它們顯示純紅色並導致不同的活動。當我返回到上一個活動時,按鈕狀態已更改爲默認值並顯示橙色。如何在按下後保留按鈕的原始狀態?如何在按下後保留按鈕狀態?

截圖: enter image description here

enter image description here

button_state.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" > 
     <shape android:shape="rectangle" > 
      <corners android:radius="3dip" /> 
      <stroke android:width="1dip" android:color="#000000" /> 
      <gradient android:angle="-90" android:startColor="#FF0D00" android:endColor="#FF0D00" /> 
     </shape> 
    </item> 
    <item android:state_focused="true"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="3dip" /> 
      <stroke android:width="1dip" android:color="#000000" /> 
      <solid android:color="#FF0D00"/> 
     </shape> 
    </item> 
    <item > 
     <shape android:shape="rectangle" > 
      <corners android:radius="3dip" /> 
      <stroke android:width="1dip" android:color="#000000" /> 
      <gradient android:angle="-90" android:startColor="#D8D8D8" android:endColor="#848484" /> 
     </shape> 
    </item> 
</selector> 

版式文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".SignInScreen" 
    android:background="#619ec9" 
    > 

    <TextView 
     android:layout_width="374dp" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Hello! Welcome to MLAD!" 
     android:id="@+id/textView" 
     android:textAlignment="center" 
     android:textSize="30dp" 
     android:layout_above="@+id/textView2" 
     android:layout_alignParentStart="true" 
     android:layout_x="-28dp" 
     android:layout_y="117dp" 
     android:typeface="serif" 
     android:textStyle="bold" 
     /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Please enter your 4 digit code:" 
     android:id="@+id/textView2" 
     android:layout_above="@+id/codeEntry" 
     android:layout_centerHorizontal="true" 
     android:textSize="27dp" 
     android:layout_x="5dp" 
     android:layout_y="182dp" 
     android:textStyle="bold" 
     android:typeface="serif" /> 

    <ImageButton 

     android:layout_width="75dp" 
     android:layout_height="75dp" 
     android:id="@+id/tick" 
     android:src="@drawable/black_tick" 
     android:background="@drawable/button_state" 
     android:layout_x="120dp" 
     android:layout_y="296dp" 
     android:layout_below="@+id/codeEntry" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="29dp" /> 

    <ImageButton 
     android:layout_width="82dp" 
     android:layout_height="82dp" 
     android:id="@+id/help" 
     android:src="@drawable/question" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:background="@drawable/button_state" 
     android:layout_x="232dp" 
     android:layout_y="4dp" /> 

    <EditText 
     android:maxLength="4" 
     android:layout_width="283dp" 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:ems="15" 
     android:id="@+id/codeEntry" 
     android:layout_centerVertical="true" 
     android:layout_alignLeft="@+id/textView2" 
     android:layout_alignStart="@+id/textView2" 
     android:layout_alignRight="@+id/textView2" 
     android:layout_alignEnd="@+id/textView2" 
     android:layout_x="19dp" 
     android:layout_y="246dp" 
     android:background="@drawable/shape" 
     android:textSize="27sp" 
     android:hint="Enter Your Code Here" 
     android:gravity="center_horizontal" 
     /> 


    <Button 
     android:layout_width="119dp" 
     android:layout_height="wrap_content" 
     android:text="Create a new account" 
     android:id="@+id/create_acc" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_toLeftOf="@+id/tick" 
     android:layout_toStartOf="@+id/tick" 
     android:textSize="18sp" 
     android:background="@drawable/button_state" 

     android:layout_x="3dp" 
     android:layout_y="410dp" 

     android:layout_alignTop="@+id/recover_code" /> 

    <Button 
     android:onClick="goSecActivity" 
     android:layout_width="105dp" 
     android:layout_height="91dp" 
     android:text="Forgot your code?" 
     android:id="@+id/recover_code" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_toEndOf="@+id/tick" 
     android:textSize="20sp" 
     android:background="@drawable/button_state" 
     android:layout_toRightOf="@+id/tick" 
     android:layout_x="222dp" 
     android:layout_y="376dp" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:src="@mipmap/mlad_logo" 
     android:layout_alignParentStart="true" 
     android:layout_toStartOf="@+id/help" 
     android:scaleType="fitXY" 
     android:layout_alignParentTop="true" 
     android:layout_alignBottom="@+id/textView2" 
     android:alpha="0.1" /> 

</RelativeLayout> 

回答

1

如果您的應用程序的生命週期即使在其銷燬後仍然存在,那麼使用sharedPreference來記住狀態。在離開其他活動之前進行設置。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(); 
prefs.edit().putBoolean("red", true).apply(); 

在您轉到新活動之前會被調用。

再有,如果在您的onResume代碼語句來做到這一點:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(); 
boolean shouldBeRed=prefs.getBoolean("red",false) 

if(shouldBeRed){ 
//change button to red here 
} 

,但如果你只需要它,而用戶在應用程序(使每個會話),只需設置一個標誌的onStop( ),然後在onResume()中相應地更改按鈕顏色。

更新:現在我明白你的問題按鈕狀態不變回灰色這是正常的狀態。嘗試刪除該從按鈕onelines在你的XML佈局:

android:focusableInTouchMode="true" 

因此,讓您的按鈕佈局現在看起來是這樣的:

<Button 
    android:onClick="goSecActivity" 
    android:layout_width="105dp" 
    android:layout_height="91dp" 
    android:text="Forgot your code?" 
    android:id="@+id/recover_code" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_toEndOf="@+id/tick" 
    android:textSize="20sp" 
    android:background="@drawable/button_state" 
    android:layout_toRightOf="@+id/tick" 
    android:layout_x="222dp" 
    android:layout_y="376dp" 
    android:focusable="true" 
    /> 

什麼發生在您每次,因爲在你的可聚焦返回頁面時間觸摸模式及其製作按鈕可聚焦這是從文檔調用你button_state.xml

的焦點狀態:

focusableInTouchMode:布爾值,用於控制視圖在觸摸模式下是否可以獲得焦點。如果對於視圖來說這是正確的,那麼該視圖可以在被點擊時獲得焦點,並且如果另一個視圖被點擊而沒有將該屬性設置爲真,焦點可以保持焦點。

+0

我是初學者。你能否詳細說明一下? –

+0

首先告訴我,你想在用戶重新啓動手機並回到你的應用程序後記住狀態嗎? – j2emanue

+0

是的,我願意。按鈕狀態應該根據xml文件編程 –

相關問題