我在ScrollView中有一个RelativeLayout,它包含一个按钮和一些TextViews和EditText。
在我的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>
关于为什么可聚焦和可聚焦的InTouchMode似乎没有任何作用,有什么想法或建议吗?
我认为这可能是我的onClick()方法没有做它应该做的事情,所以我把它简化为一些简单的东西,只是为了看看,它的行为也一样。这是我的简化onClick():
public void onClick(View view) {
new AlertDialog.Builder(this).setTitle("Argh").setMessage("Watch out!").setNeutralButton("Close", null).show();
}
好的,我找到了。当然,这是我自己的错误。在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 );
效果很好。