Кнопка 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 );

Который прекрасно работает.

Другие вопросы по тегам