如何在Android中关闭Drawerlayout onBackPressed?

时间:2014-03-04 21:29:38

标签: android

我按下导航抽屉,然后如果我按下后退按钮,应用程序退出而不是返回上一个活动。如果我更改xml文件,则不会发生此问题。所以我认为问题出在xml文件中。谁能告诉我这是什么问题? 这是xml代码。

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="500dp"
    android:layout_height="200dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/blue_train" />

<TextView
    android:id="@+id/trainName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="200dp"
    android:layout_marginLeft="14dp"
    android:text="Train Name"
    android:textColor="@color/bluedark"
    android:textSize="15sp" />

<EditText
    android:id="@+id/etName"
    android:layout_width="150dp"
    android:layout_height="40dp"
    android:layout_alignBaseline="@+id/trainName"
    android:layout_alignBottom="@+id/trainName"
    android:layout_marginLeft="30dp"
    android:layout_toRightOf="@+id/trainName"
    android:background="@drawable/line"
    android:ems="10" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/getS"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/etName"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:background="@drawable/button2"
    android:text="Get Train Schedule"
    android:textColor="@color/white" />

`

4 个答案:

答案 0 :(得分:36)

这会在抽屉打开和关闭时关闭抽屉,而不是将您带回上一个活动(或退出)。

DrawerLayout drawer...

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub

    if(drawer.isDrawerOpen(Gravity.LEFT)){
        drawer.closeDrawer(Gravity.LEFT);
    }else{
        super.onBackPressed();
    }
}

答案 1 :(得分:1)

ListView mDrawerList;

@Override
public void onBackPressed() {
// TODO Auto-generated method stub

if(mDrawerLayout.isDrawerOpen(mDrawerList)){
    mDrawerLayout.closeDrawer(mDrawerList);
}else{
    super.onBackPressed();
}
}

答案 2 :(得分:1)

我这样做了:

private DrawerLayout mDrawerLayout;

<强>的onCreate()

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);  
mDrawerLayout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

希望这会对你有所帮助。

答案 3 :(得分:0)

@Hiren Patel的回答是迄今为止最优雅的,但是您应该设置:

mDrawerLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

mDrawerLayout.descendantFocusability = ViewGroup.FOCUS_BEFORE_DESCENDANTS

那样您就不会阻止其他子视图获得焦点,因此也就不会阻止软键盘。