0

我想知道我是否正确设置了 TouchDelegate。我想增加我的 LinearLayout 中 TextViews 的触摸区域。

我的布局看起来像这样。

<LinearLayout
        android:id="@+id/subcategory"
        android:layout_width="fill_parent"
        android:layout_height="35dp"
        android:background="#000000"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:padding="5dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:text="All"
            android:textColor="#FFFFFF"
            android:textSize="18sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:text="None"
            android:textColor="#FFFFFF"
            android:textSize="18sp" />
</LinearLayout>

我从 onActivityCreated() 调用以下内容,其中 subCategoryLayout 是 LinearLayout

subCategoryLayout.post(new Runnable() {

                @Override
                public void run() {
                    for (int i = 0; i < subCategoryLayout.getChildCount(); i++) {
                        Rect delegateArea = new Rect();
                        TextView d = (TextView) subCategoryLayout.getChildAt(i);
                        d.getHitRect(delegateArea);
                        delegateArea.bottom += 50;
                        delegateArea.top += 200;
                        delegateArea.left += 50;
                        delegateArea.right += 50;

                        TouchDelegate expandedArea = new TouchDelegate(delegateArea, d);
                        subCategoryLayout.setTouchDelegate(expandedArea);
//                        if (View.class.isInstance(d.getParent())) {
//                            ((View) d.getParent()).setTouchDelegate(expandedArea);
//                        }
                    }
                }
            });
4

1 回答 1

2

第一点是View只能有一个TouchDelegate。因此,实际上在您的 for 循环之后,最后一个 TouchDelegate 设置为 subCategoryLayout。如果您想将多个 TouchDelegate 添加到一个视图中,您可以使用TouchDelegateComposite

第二点是你想将触摸区域扩大到顶部50dp,底部200dp。但是您的 subCategoryLayout 高度是 35dp,只有那些命中 subCategoryLayout 的触摸才会传递给 TouchDelegate。因此,如果您想将触摸区域扩展到更大的值,则必须将 TouchDelegate 添加到一些足够大的父布局中。如果你这样做,你应该记住,你必须相对于更大的布局计算 delegateArea。

于 2013-12-06T09:05:09.360 回答