2015-12-02 50 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文件编程 –