2013-07-09

TextViewのclickイベントを、タップした箇所によって振り分ける

Android4.2にて。 具体的に言うと、1つのTextViewにおいて、左半分をタップした時と右半分をタップした時とでイベントを振り分けたかった。その時の実装手順メモ。

2013-07-09-02-01.png
2013-07-09-02-01.png

FrameLayoutを利用して、透明のビューを左半分、右半分と配置し、その上にTextViewを重ねることで実装できた。ただし、この実装方法が正しいという保証はない(むしろゴリ押し感がある)。

sample.xml(レイアウトファイル)

<FrameLayout
    android:background="#696969"
    android:layout_width="match_parent"
    android:layout_height="100dp">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:onClick="rightTap" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:onClick="leftTap" />

    </LinearLayout>

    <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:textColor="#fff"
            android:textSize="30sp"
            android:text="TextView" />

</FrameLayout>

MainActivity.java(※抜粋)

public void rightTap(View view) {
    Toast.makeText(getApplicationContext(), "right!", Toast.LENGTH_SHORT).show();
}
public void leftTap(View view) {
    Toast.makeText(getApplicationContext(), "left!", Toast.LENGTH_SHORT).show();
}

TextView要素の右半分をタップした時

2013-07-09-02-02.png
2013-07-09-02-02.png

TextView要素の左半分をタップした時

2013-07-09-02-03.png
2013-07-09-02-03.png

以上。