17

私は動的にRelativeLayout多くを追加しています。TextViews私が直面している問題は、onTouch リスナーをTextViews個別に適用するたびにタッチが検出されますが、相対レイアウトにタッチを追加すると応答しないことです。

このコードは、タッチ イベントを正常に検出します。

TextView tv = new TextView(this);
tv.setText(values[i]);
Drawable d = getResources().getDrawable(R.drawable.level_small_corners);

tv.setClickable(true);
tv.setId(i+1);
tv.setTextSize(18);
tv.setOnTouchListener(cellTouch);

しかし、これらすべての TextView を myRelativeLayout に追加すると、次のようになります。

myRelativeLayout.setOnTouchListener(cellTouch);

これで、onTouchListener が呼び出されることはありません。どうしてこんなことに?

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:background="@android:color/black">
    .
    .
    .

    <ScrollView 
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"
        android:layout_below="@+id/levelFirstLayout"
        android:layout_marginBottom="70dp" > 

        <RelativeLayou
            android:id="@+id/wordsRelativeLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true" >

        </RelativeLayout>

    </ScrollView> 
    .
    .
    .
</RelativeLayout>
4

6 に答える 6

18

myRelativeLayout.xmlに以下を追加します。

android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
于 2012-06-24T20:16:23.377 に答える
15

これは私のために働いた:

yourRelativeLayout.setOnTouchListener(new View.OnTouchListener() {  
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        //gesture detector to detect swipe.
        gestureDetector.onTouchEvent(arg1);
        return true;//always return true to consume event
    }
});
于 2012-09-20T08:25:46.277 に答える
7
tv.setClickable(true);

タッチイベントを発生させずにレイアウトを引き起こしています。これを取り除いてみてください。

于 2012-06-25T02:38:50.107 に答える
3

ビュー内の何かが myRelativeLayout の「上」にある可能性があります。そうであれば、最初にタッチイベントを取得しています。これに関する最悪の部分は、イベントのデフォルトの処理が、イベントに対して何もせずに消費することです。

1 つの解決策は、イベントを処理する必要があるビュー (またはレイアウト) の「上」にあるディスプレイのコンポーネントにこのコードを追加することです。

someView.setOnTouchListener (new View.OnTouchListener()
{
    @Override
    public boolean onTouch (View v, MotionEvent event)
    {
        return false;
    }
});

キーは (明らかに) false を返すことです。これを行うと、イベントは消費されるのではなく、相対的なレイアウト内の何かに「下に」渡されます。

于 2012-09-28T13:16:10.777 に答える
0

RelativeLayoutビューにこの属性をtrueに設定する必要があります。android:clickable="true"

于 2012-06-24T20:14:20.707 に答える