2014-01-20 75 views
2

我在包含TextView和ImageView的linearlayout上添加了一個ontouchlistener。當我觸摸它的TextView部件時,ImageView不起作用。我希望所有的linearlayout都可以獲得觸摸事件。我該怎麼做?我的XML如下:如何在LinearLayout上添加ontouchlistener或clicklistener?

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="50dip" 
    android:background="@drawable/graytitle_bj1_black" 
    android:gravity="center|bottom" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:id="@+id/nav_boutique" 
     android:layout_width="120dip" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginBottom="2dip" 
     android:clickable="true" 
     android:focusableInTouchMode="true" 
     android:descendantFocusability="blocksDescendants"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/description" 
      android:src="@drawable/btn_jingpin_icon" 
      android:background="#FFF" 
      android:focusable="false" 
      android:clickable="true"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="#ffffff" 
      android:text="@string/bottom_jingpin"/> 
     <View 
      android:id="@+id/nav_boutique_line" 
      android:layout_width="fill_parent" 
      android:layout_height="2dip" 
      android:background="#F00"/> 
    </LinearLayout> 
    <View 
     android:layout_width="1dip" 
     android:layout_height="fill_parent"/> 
    <LinearLayout 
     android:id="@+id/nav_fenlei" 
     android:layout_width="120dip" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginBottom="2dip" 
     android:clickable="true" 
     android:descendantFocusability="blocksDescendants" 
     android:focusableInTouchMode="true"> 

     <ImageView    
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/description" 
      android:src="@drawable/icon_fenlei" 
      android:background="#00000000" 
      android:focusable="false" 
      android:clickable="true"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="#ffffff" 
      android:text="@string/bottom_fenlei"/> 
     <View 
      android:id="@+id/nav_fenlei_line" 
      android:layout_width="fill_parent" 
      android:layout_height="2dip"/> 
    </LinearLayout> 

    <View 
     android:layout_width="1dip" 
     android:layout_height="fill_parent"/> 
    <LinearLayout 
     android:id="@+id/nav_dingyue" 
     android:layout_width="120dip" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginBottom="2dip" 
     android:clickable="true" 
     android:descendantFocusability="blocksDescendants" 
     android:focusableInTouchMode="true"> 

     <ImageView    
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/description" 
      android:src="@drawable/btn_zizhudingyue_icon" 
      android:background="#00000000" 
      android:clickable="true" 
      android:focusable="false"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="#ffffff" 
      android:text="@string/bottom_dingyue"/> 
     <View 
      android:id="@+id/nav_dingyue_line" 
      android:layout_width="fill_parent" 
      android:layout_height="2dip"/> 
    </LinearLayout> 

    <View 
     android:layout_width="1dip" 
     android:layout_height="fill_parent"/> 
    <LinearLayout 
     android:id="@+id/nav_sousuo" 
     android:layout_width="120dip" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginBottom="2dip" 
     android:clickable="true" 
     android:descendantFocusability="blocksDescendants" 
     android:focusableInTouchMode="true"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/description" 
      android:src="@drawable/icon_sousuo" 
      android:background="#00000000" 
      android:focusable="false" 
      android:clickable="true"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="#ffffff" 
      android:text="@string/bottom_sousuo"/> 
     <View 
      android:id="@+id/nav_sousuo_line" 
      android:layout_width="fill_parent" 
      android:layout_height="2dip"/> 
    </LinearLayout> 

</LinearLayout> 

這是我的代碼:

dingyueLL.setOnTouchListener(new OnTouchListener() 
    { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      setFlagTrue(Navigation.Dingyue.getPosition()); 
      setBtnLine(); 
      return false; 
     } 

    }); 
+1

你說「我的XML是如下:」但你沒有張貼 –

+0

不知道爲什麼它不適合您的ImageView的(需要更多的信息)工作,但在此期間,你的'onTouch()'方法可能應該返回'true'。 – Turix

+0

是否破壞了你自己的帖子?我回滾了 –

回答

3

onintercepttouchevent創建自定義線性佈局。

public class MyLayout extends LinearLayout { 
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     // do whatever you want with the event 
     // and return true so that children don't receive it 
     return true;  
    } 
} 

檢查此主題。

http://developer.android.com/training/gestures/viewgroup.html

adding touch listener for liner layout filled with buttons

+0

謝謝,這真的很有幫助。 –

+0

你是對的!其實我前幾天看到這個,我不記得了,但那是一個優雅的解決方案! +1 –

1

什麼,我會嘗試是一個觸摸監聽器明確添加到圖像,看看發生了什麼。在這個監聽器,不要叫夜宵,並返回false,那麼該事件將傳播到下一個聽衆,希望佈局

dingyueLL.setOnTouchListener(new OnTouchListener() 
    { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      setFlagTrue(Navigation.Dingyue.getPosition()); 
      setBtnLine(); 
      return false; 
     } 

    }); 

THEIMAGE.setOnTouchListener(new OnTouchListener() 
    { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 

      return false; 
     } 

    }); 

也將斷點在圖像的聽衆的ontouch功能,看看它是否到達那裏

相關問題