I have a ToggleButton
. I want to have more place for click on this button. If I add layout_width
, layout_height
etc. the image looks bad. I also tried using android:padding
but it did not help me.
It is needed for the convenience of users.
I have a ToggleButton
. I want to have more place for click on this button. If I add layout_width
, layout_height
etc. the image looks bad. I also tried using android:padding
but it did not help me.
It is needed for the convenience of users.
Easy solution : If you have image for the button, then create transparent area around it (i.e. for touch area).
The grey area can be transparent to increase the touch area.
Or use TouchDelegate
Use TouchDelegate
for your ToggleButton
as ammar26 have commented you.
Or
Try this:
Make one parent layout like LinearLayout
or RelativeLayout
that cover the ToggleButton
. And now put margin to that Parent layout.
Now, on click of that Parent layout do action for the toggle button.
Hope it will help you to increase touch area for your view.
Happy Coding.
Easy solution : If you have image for the button, then create transparent area around it (i.e. for touch area).
The grey area can be transparent to increase the touch area.
Or use TouchDelegate
You can also increase touch area by setting touch delegates
Android Developer Training Blog Post
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);
}
}
});
}
}
Instead of putting the touch event in button put it in the layout containg the only the button..and fix the size of the layout as ur wish
increase the values of 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" />
Take the margin
(place of padding
) of your Button
from its parent layout
and then perform opration on your Layout
mLayout.setonTouchListener(View.onTouchListener{
// here your working code
});
You can increase touch area using touch delegates.
Write a common function like this:
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
}
}
and call it wherever you want to increase the hit area.
view.increaseHitAreaForViews(
Pair(btn, 40)
)
where view is the parent layout and btn is the control that you want to increase touch area. You can also adjust the value 40 as per you need.
© 2022 - 2024 — McMap. All rights reserved.