Android – Using TouchDelegates

TouchDelegates in Android allow to increase the touch area of a View, e.g. Button. This is very useful if you want to make it easier for the user to touch your button.

Here is a small example for the usage of a touch delegate. The layout has the ID root and contains a button with the ID delegated_button.

package de.vogella.android.touchdelegate;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.TouchDelegate;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button mButton;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mButton = (Button) findViewById(R.id.delegated_button);
		View parent = findViewById(R.id.root);
		parent.post(new Runnable() {
			public void run() {
				// Post in the parent's message queue to make sure the parent
				// lays out its children before we call getHitRect()
				Rect delegateArea = new Rect();
				Button delegate = mButton;
				delegate.getHitRect(delegateArea);
				delegateArea.top -= 600;
				delegateArea.bottom += 600;
				delegateArea.left -= 600;
				delegateArea.right += 600;
				TouchDelegate expandedArea = new TouchDelegate(delegateArea,
						delegate);
				// give the delegate to an ancestor of the view we're
				// delegating the
				// area to
				if (View.class.isInstance(delegate.getParent())) {
					((View) delegate.getParent())
							.setTouchDelegate(expandedArea);
				}
			};
		});
	}
}

About Lars Vogel

Lars Vogel is the founder and CEO of the vogella GmbH and works as Eclipse and Android consultant, trainer and book author. He is a regular speaker at international conferences, He is the primary author of vogella.com. With more than one million visitors per month this website is one of the central sources for Java, Eclipse and Android programming information.
This entry was posted in Other. Bookmark the permalink.

2 Responses to Android – Using TouchDelegates

  1. Josh says:

    How do you feel about using negative layoutMargins (possibly compensated for by padding) to achieve a similar effect? It requires a lot less code. Sometimes it’s not possible, but it’s rare to come across those situations.

  2. Lars Vogel says:

    @Josh: I didn’t know that this also works. Thanks for the info.

Comments are closed.