Hello,

My end result is to increase the clickable area of certain views that are 
small. It appears that this can be done with a 
TouchDelegate<http://groups.google.com/group/android-developers/browse_thread/thread/178af525ab84b371>,
 
but in my case, there will be scenarios where one container has multiple 
views that I would like to increase the hit area for. Comments from this 
Stack Overflow 
question<http://stackoverflow.com/questions/1343222/is-there-an-example-of-how-to-use-a-touchdelegate-in-android-to-increase-the-siz>suggest
 this method can only be done for a single view inside a ViewGroup.

So, I've attempted to override 
getHitRect<http://developer.android.com/reference/android/view/View.html#getHitRect%28android.graphics.Rect%29>on
 a subclass of View, to increase the area. The example program below 
attempts to make the area 100px above and below a button clickable.  The 
results are as follows:
- Emulator running 2.2: The area above and below is clickable, clicking 
that area makes toast.
- Nexus One running 2.3.6: The getHitRect method gets called, but the click 
method is not fired when clicking above/below the button.
- Galaxy Nexus running 4.0.4: The getHitRect method never gets called, and 
hence, no click event when clicking above/below the button.


My question is twofold:
1) Is there a more elegant way to increase the click area of multiple views 
inside one ViewGroup?
2) Just out of curiosity, how is the getHitRect method supposed to work/be 
used? Is it deprecated?

Here's the short example:

public class TestActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        /* simply create a layout with some whitespace surrounding an 
instance of my custom button */
        LinearLayout container = new LinearLayout(this);
        container.setGravity(Gravity.CENTER_VERTICAL);
        container.setOrientation(LinearLayout.VERTICAL);

        TestButton button = new TestButton(this);
        button.setText("Make Toast");
        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                Toast.makeText(TestActivity.this, "button was clicked", 
Toast.LENGTH_SHORT).show();
            }
        });
        container.addView(button);
        setContentView(container);
    }

    public static class TestButton extends Button
    {
        public TestButton(Context context)
        {
            super(context);
        }

        @Override
        public void getHitRect(Rect outRect)
        {
            super.getHitRect(outRect);
            /* just an example, for test purposes */
            outRect.top -= 100;
            outRect.bottom += 100;
            Log.d("TestActivity", "getHitRect called, value: " + 
outRect.toShortString());
        }
    }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to