Android按钮总是需要两次点击才能点击onClick()

时间:2013-07-03 14:58:14

标签: android button onclick focusable

我在ScrollView中有一个RelativeLayout,它包含一个Button和一些TextViews和EditTexts。

在我的xml布局文件中,我定义了android:onClick,但它总是需要点击两次按钮才能触发事件。按钮始终在第一次单击时获得焦点,并在第二次单击时触发onClick事件。我尝试将focusable和focusableInTouchMode都设置为false,但行为不会改变。

这是我的布局文件:

<ScrollView 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:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".DensityActivity" >

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
        ...

        <TextView
        ...

        <TextView
        ...

        <EditText
        ...

        <Button
            android:id="@+id/ad_button_calculate"
            android:layout_width="112dp"
            android:layout_height="wrap_content"
            android:layout_below="@id/ad_edit_obs_temp"
            android:layout_alignParentRight="true"
            android:layout_marginTop="20pt"
            android:paddingLeft="6pt"
            android:onClick="onClick"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:text="@string/button_calculate" />

        <TextView
        ...

    </RelativeLayout>
</ScrollView>

关于为什么focusable和focusableInTouchMode似乎没有做任何事情的任何想法或建议?

我认为可能是我的onClick()方法没有做它应该做的事情所以我把它简化为简单的东西只是为了看,它的行为是一样的。这是我简化的onClick():

public void onClick(View view) {

    new AlertDialog.Builder(this).setTitle("Argh").setMessage("Watch out!").setNeutralButton("Close", null).show();

}

1 个答案:

答案 0 :(得分:4)

好的,我找到了。当然,这是我自己的错误。 在我的onCreate方法结束时,我这样做了:

// Set the focus to the calculate button so the keyboard won't show up automatically 
Button calcButton = (Button)findViewById( R.id.ac_button_calculate );
calcButton.setFocusable( true );
calcButton.setFocusableInTouchMode( true ); 
calcButton.requestFocus();

当然,无论我在xml文件中做了什么,我都在我的代码中覆盖了它。 相反,我用它来隐藏键盘:

getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN );

哪个效果很好。