複数のボタンを同時にタップさせないようにする

1つの画面にボタンを2つ配置する。
ボタンを同時のタップすると・・・・・2つのボタンが同時に効いてしまう。

今までこんなことあったっけ!?

と思い調べてみました。
ちなみにAndroid4.0.3でコンパイルしてました。

2.3.3の時はそんなことなかったはずなので、
2.3.3でコンパイルし直して、同様にボタンを同時押ししてみた。

・・・・・起きない。

調べてみると・・・・あった。
3.0かららしいが、どうやらイベントはデフォルトでそれぞれのViewごとで受け付けられるようになっているぽい。
2.3.3までは、あるViewをタップしている間、別のViewはイベントを受け付けられなかったが、
3.0以降はデフォルトでイベント中に別のイベントも受け付けるらしい。

別のViewを受け付けないようにするためには、以下のように、親Viewの属性として「android:splitMotionEvents="false"」を追加する。

<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:splitMotionEvents="false">
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button1"
        android:id="@+id/button1"/>
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2"
        android:id="@+id/button2"/>
</LinearLayout>

これが書いてある子Viewはイベントを並行して処理しなくなる。

また、いちいちレイアウトに設定したくない場合は、以下のようにstyles.xmlにテーマ、およびスタイルとして設定してもよい。

<style name="AppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowEnableSplitTouch">false</item>
</style>