2012-08-27 116 views
0

這是我的xml文件,你可以看到它被線性佈局多次嵌套。我如何檢查LinearLayout是否被點擊


我想acheive什麼是當我點擊llOptionA的區域(第一 線性佈局),我會得到敬酒通知。


我也穿上了llOptionA.setonclickListener() 敬酒但是,當我在文本中單擊它什麼都不做。

然後我還設置onclicklisteners在他們每個給我不同的敬酒 - > svTest,layout_inner,tvOptionA。並且我點擊各處以查看哪個部分顯示哪個麪包。甚至當你設置一個OnClickListener

 <LinearLayout 
      android:id="@+id/llOptionA" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:background="#ff00ff" 
      android:paddingLeft="30dp" 
      android:paddingRight="30dp" 
      android:paddingTop="5dp" > 

      <HorizontalScrollView 
       android:id="@+id/svTest" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" > 

       <LinearLayout 
        android:id="@+id/layout_inner" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" > 

        <TextView 
         android:id="@+id/tvOptionA" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:maxLines="1" 
         android:text="A - Option A " 
         android:textAppearance="?android:attr/textAppearanceMedium" 
         android:textColor="#ffffff" 
         android:textStyle="bold" /> 
       </LinearLayout> 
      </HorizontalScrollView> 
     </LinearLayout> 

回答

4

首先一個的LinearLayout不聽由默認點擊事件。您還需要將此屬性添加到您的LinearLayout llOptionA

android:clickable="true" 

點擊開始在最高水平,TextView的tvOptionA,和工作是一路下滑,直到查看消耗此事件。因此,在它到達llOptionA之前,您的Horizo​​ntalScrollView會截取默認的OnTouchListener中的點擊,並且不會將其傳遞給您的llOptionA ...您可以通過Horizo​​ntalScrollView中的OnTouchListener偵聽單擊事件以調用相應的方法。

也許這是一個簡化的佈局,但LinearLayout中layout_inner只有一個孩子,爲此沒有必要,你可以簡單地使用:

<LinearLayout ...> 
    <HorizontalScrollView ...> 
     <TextView .../> 
    </HorizontalScrollView> 
</LinearLayout> 

當然llOptionA中只有一個孩子,所以你可以更簡化它:

<HorizontalScrollView ...> 
    <TextView .../> 
</HorizontalScrollView> 

Additio n的評論

這裏是如何把它放在一起:

public class Example extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     LinearLayout linearLayout = (LinearLayout) findViewById(R.id.llOptionA); 
     linearLayout.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       toast(); 
      } 
     }); 

     HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.svTest); 
     hsv.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_UP) 
        toast(); 
       return false; 
      } 
     }); 
    } 

    public void toast() { 
     Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

它只是我的代碼部分嵌套即使如此我不能簡化像你說不過你給了我一個很好的有關點擊優先級和級別的信息。謝謝你,但它並沒有解決我的問題。你的可點擊不起作用。 –

+0

@HishamMuneer我更新了我的第二個項目並提供了一個例子。現在它應該工作。 – Sam

+0

感謝您的所有幫助......它使我的代碼更加混亂,但最終它的工作......我認爲回報應該是真的...... –