我有一个FrameLayout表,其中每个帧包含
ImageView或TextView.无论帧中的内容如何,我都希望通过帧上的OnClickListener检测onClick事件.
我怎样才能做到这一点?
这是我的一些布局,我总共有5行(这里只显示1行).
如上所述,每行有5个FrameLayouts,每个包含一个TextView.我无法将OnClickListener放在TextView上,因为这可能会在运行时更改为ImageView.因此我想在FrameLayout上使用OnClickListener.
似乎FrameLayout的内容阻止它检测到click事件.
- <TableLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/gateContainer"
- android:stretchColumns="*">
- <TableRow
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_gravity="center">
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/door1"
- android:clickable="true">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="New Text"
- android:id="@+id/textView"
- android:layout_gravity="center" />
- </FrameLayout>
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/door2" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="New Text"
- android:id="@+id/textView5"
- android:layout_gravity="center" />
- </FrameLayout>
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/door3" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="New Text"
- android:id="@+id/textView4"
- android:layout_gravity="center"/>
- </FrameLayout>
- </TableLayout>
这是我如何设置OnClickListeners的示例:
- View.OnClickListener clickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v){
- // do something
- }
- };
- TableLayout tableLayout = (TableLayout) findViewById(R.id.gateContainer);
- // Go through all TableRows
- for (int i = 0; i < tableLayout.getChildCount(); i++){
- TableRow tableRow = (TableRow) tableLayout.getChildAt(i);
- // Set listener for each FrameView
- for (int j = 0; j < tableRow.getChildCount(); j++){
- FrameLayout frame = (FrameLayout) tableRow.getChildAt(j);
- frame.setOnClickListener(clickListener);
- }
- }
解决方法
只需在ImageView和TextView组件上实现OnTouchListener并将它们放在一边即可传递它们.
- <your_view>.setOnTouchListener(new OnTouchListener(){
- @Override
- public boolean onTouch(View v,MotionEvent event) {
- // TODO Auto-generated method stub
- return true;
- }
- });
这将确保您的容器处理.