碎片:按BACK时按钮按下状态未恢复

时间:2011-12-02 23:51:18

标签: android

我在布局中嵌入了一个片段。这个片段有一个非常简单的视图(基本上只是一个样式按钮,其按下状态是以编程方式设置的)。

当我从托管片段的活动开始一个新活动,然后按BACK返回原始活动时,按钮仍然被禁用,但现在显示其未按下状态。

layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

     <fragment
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        class="com.mypackage.NavigationDrawerFragment"
        android:gravity="bottom"
        android:padding="5dp" />>

</RelativeLayout>

fragment_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:orientation="horizontal"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:paddingBottom="10dp" >

    <Button
            android:id="@+id/nav_home"
            style="@style/navigation_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:drawableTop="@drawable/button_home"
            android:text="HOME"
            android:textColor="@drawable/button_text" />

</RelativeLayout>

在片段类中,我只需执行以下操作:

  • 禁用按钮
  • 将按钮的按下状态设置为true(显示可绘制的状态)

我的片段类:

public class NavigationDrawerFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        mDrawer = inflater.inflate(R.layout.fragment_navigation_drawer,
            container, false);
        mButtonHome = (Button) mDrawer.findViewById(R.id.nav_home);
        mButtonHome.setEnabled(false);
        mButtonHome.setPressed(true);
    }
}

知道为什么按钮的启用状态被保留,但是按下的状态不是?

1 个答案:

答案 0 :(得分:0)

作为解决此问题的方法,我现在只禁用该按钮,并在我的drawable和颜色中添加了set_enabled =“false”状态。此状态与“按下”状态相同。

抽拉/ button_home.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_home_down" android:state_enabled="false"/> <!-- disabled state -->
    <item android:drawable="@drawable/btn_home_down" android:state_pressed="true"/> <!-- pressed -->
    <item android:drawable="@drawable/btn_home" /> <!-- default -->
</selector>

抽拉/ button_text.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:color="@color/button_down" android:state_enabled="false"/><!-- disabled state -->
    <item android:color="@color/button_down" android:state_pressed="true"/> <!-- pressed -->
    <item android:color="@color/button_up" /> <!-- default -->
</selector>

这基本上与在按钮上调用setEnabled(false)和setPressed(true)具有相同的效果。