2012-08-27 70 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

感谢您的所有帮助......它使我的代码更加混乱,但最终它的工作......我认为回报应该是真的...... –