Кнопка Android всегда запускается в два клика onClick()
У меня есть RelativeLayout внутри ScrollView, который содержит кнопку и некоторые 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 ответ
ОК, я нашел это. Это была, конечно, моя собственная ошибка. В конце моего метода 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 );
Который прекрасно работает.