2012-10-19 69 views
1

比方說,有一個RelativeLayout的是這樣的:如何通過觸摸事件避免RelativeLayout子視圖的不可見部分?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:eve="http://schemas.android.com/apk/res/com.yyg.kaolamusic" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/A" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <LinearLayout 
     android:id="@+id/B" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout > 

那麼,我們如何才能避免觸摸事件經過到孩子,如果我們觸及到B,而B不處理該觸摸事件?

+0

更多的細節解釋.. – NagarjunaReddy

+0

@NagarjunaReddy這是一個簡單的問題,因爲乙上形成疊加,用戶將不預期甲採取一些動作(例如,滾動)時他們將手指放在A上,但RelativeLayout的確如此。 – liuyong

+1

*如果我們觸摸B但B不處理該觸摸事件,我們如何避免觸摸事件進入子項A?您通過從觸摸偵聽器返回true來處理該事件。 – Luksprog

回答

0

您可以爲視圖B設置一個觸摸偵聽器,它始終消耗觸摸事件,所以A永遠不會獲得觸摸事件。

示例代碼:

mA = (LinearLayout) getView().findViewById(R.id.A); 
    mA.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Toast.makeText(getActivity(), "Touch A",Toast.LENGTH_LONG).show(); 
      return false; 
     } 
    }); 
    mB = (LinearLayout) getView().findViewById(R.id.B); 
    mB.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Toast.makeText(getActivity(), "Touch B",Toast.LENGTH_LONG).show(); 
      return true; 
     } 
    }); 
+0

好的,我接受這個答案。你有沒有看到上面的評論?我傾向於讓@Luksprog回答這個問題...... – liuyong

相關問題