Как я могу увеличить область касания для элементов управления (ToggleButton)?

у меня есть ToggleButton. Я хочу иметь больше места для нажатия на эту кнопку. Если я добавлю layout_width, layout_height etc. изображение выглядит плохо. Я также попытался использовать android:padding но это мне не помогло.

это необходимо для удобства пользователей.

enter image description here

6 ответов


простое решение: если у вас есть изображение для кнопки, создайте вокруг нее прозрачную область (т. е. для сенсорной области).

серая область может быть прозрачна для увеличения области касания.

enter image description here

или использовать TouchDelegate


вы также можете увеличить площадь касания, установив 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);
                } 
            } 
        }); 
    } 
} 

использовать TouchDelegate для ToggleButton как ammar26 прокомментировал вас.

или

попробуйте это:

сделать один родительский макет, как LinearLayout или RelativeLayout, которые охватывают ToggleButton. А теперь добавь маржу к родительскому макету.

теперь, при щелчке этого родительского макета выполните действие для кнопки переключения.

надеюсь, что это поможет вам увеличить область касания для вашего вида.

Удачи В Кодировании.


вместо того, чтобы поместить сенсорное событие в кнопку, поместите его в макет, содержащий только кнопку..и зафиксируйте размер макета как ur wish


увеличение значения 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" />

взять margin (место padding) от Button из его parent layout а затем выполните opration на вашем Layout

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