Как я могу увеличить область касания для элементов управления (ToggleButton)?
у меня есть ToggleButton
. Я хочу иметь больше места для нажатия на эту кнопку. Если я добавлю layout_width
, layout_height
etc. изображение выглядит плохо. Я также попытался использовать android:padding
но это мне не помогло.
это необходимо для удобства пользователей.
6 ответов
простое решение: если у вас есть изображение для кнопки, создайте вокруг нее прозрачную область (т. е. для сенсорной области).
серая область может быть прозрачна для увеличения области касания.
или использовать 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_light"
android:thumb="@drawable/thumb" />
взять margin
(место padding
) от Button
из его parent layout
а затем выполните opration на вашем Layout
mLayout.setonTouchListener(View.onTouchListener{
// here your working code
});