android 如何增加控件(ToggleButton)的触摸区域?

drkbr07n  于 2023-06-27  发布在  Android
关注(0)|答案(7)|浏览(132)

我有一个ToggleButton。我想有更多的地方点击这个按钮。如果我加上layout_widthlayout_height等等。图像看起来不好。我也试过使用android:padding,但它没有帮助我。
这是为了方便用户。

eufgjt7s

eufgjt7s1#

简单的解决方案:如果您有按钮的图像,然后在其周围创建透明区域(即用于触摸区域)。
灰色区域可以是透明的以增加触摸面积。

或使用TouchDelegate

mitkmikd

mitkmikd2#

您还可以通过设置touch delegates来增加触摸面积Android开发者培训博客文章

public class MainActivity extends Activity {

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Get the parent view 
        View parentView = findViewById(R.id.parent_layout);

        parentView.post(new Runnable() {
            // Post in the parent's message queue to make sure the parent 
            // lays out its children before you call getHitRect() 
            @Override 
            public void run() { 
                // The bounds for the delegate view (an ImageButton 
                // in this example) 
                Rect delegateArea = new Rect();
                ImageButton myButton = (ImageButton) findViewById(R.id.button);
                myButton.setEnabled(true);
                myButton.setOnClickListener(new View.OnClickListener() {
                    @Override 
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, 
                                "Touch occurred within ImageButton touch region.",  
                                Toast.LENGTH_SHORT).show();
                    } 
                }); 

                // The hit rectangle for the ImageButton 
                myButton.getHitRect(delegateArea);

                // Extend the touch area of the ImageButton beyond its bounds 
                // on the right and bottom. 
                delegateArea.right += 100;
                delegateArea.bottom += 100;

                // Instantiate a TouchDelegate. 
                // "delegateArea" is the bounds in local coordinates of  
                // the containing view to be mapped to the delegate view. 
                // "myButton" is the child view that should receive motion 
                // events. 
                TouchDelegate touchDelegate = new TouchDelegate(delegateArea, 
                        myButton);

                // Sets the TouchDelegate on the parent view, such that touches  
                // within the touch delegate bounds are routed to the child. 
                if (View.class.isInstance(myButton.getParent())) {
                    ((View) myButton.getParent()).setTouchDelegate(touchDelegate);
                } 
            } 
        }); 
    } 
}
smdncfj3

smdncfj33#

使用TouchDelegate为您的ToggleButton作为ammar26评论你。
或者
试试这个:
创建一个父布局,如LinearLayoutRelativeLayout,覆盖ToggleButton。现在将边距添加到父布局。
现在,在点击父布局时,对切换按钮执行操作。
希望它能帮助你增加触摸面积为您的看法。
快乐编程

mlnl4t2r

mlnl4t2r4#

而不是把触摸事件在按钮把它放在布局containg唯一的按钮..和固定的大小布局如你所愿

fcg9iug3

fcg9iug35#

增加android:padding的值:

<SeekBar android:id="@+id/seek" android:layout_width="0dip"
android:layout_height="wrap_content" android:layout_weight="1" 
android:paddingTop="5dp" android:paddingBottom="5dp"
android:progressDrawable="@drawable/green_scrubber_progress_horizontal_holo_ligh‌​t"
android:thumb="@drawable/thumb" />
u5i3ibmn

u5i3ibmn6#

parent layout中取出margin(代替padding),然后在Layout上执行操作

mLayout.setonTouchListener(View.onTouchListener{
     // here your working code 
});
56lgkhnf

56lgkhnf7#

可以使用触摸代理来增加触摸区域。
写一个像这样的通用函数:

fun View.increaseHitAreaForViews(vararg viewsAndDetail: Pair<View, Int>) {
            val touchDelegateComposite = TouchDelegateComposite(this)
            post {
                viewsAndDetail.forEach { pair ->
                    val rect = Rect()
                    val view = pair.first
                    view.getHitRect(rect)
                    rect.top -= pair.second
                    rect.left -= pair.second
                    rect.bottom += view.measuredHeight + pair.second
                    rect.right += view.measuredWidth + pair.second
                    touchDelegateComposite.addDelegate(TouchDelegate(rect, view))
                }
                touchDelegate = touchDelegateComposite
            }
        }

并在任何你想增加命中面积的地方调用它。

view.increaseHitAreaForViews(
  Pair(btn, 40)
)

其中view是父布局,btn是要增加触摸面积的控件。您也可以根据需要调整值40

相关问题