Add the possibility to modify the View focus rect

This change makes it possible for a view to supply a different rectangle than
the drawing rect to be used by the FocusFinder when finding a new view to give
focus to. This is useful if e.g. the total view area is larger than the
interactive area of the view.

The default implementation of getFocusRect() will return  getDrawingRect().
The existing behaviour is only changed if getFocusRect() is overridden by a
subclass of android.view.View

Change-Id: I52dd95c6fa296b744e354217051dcec1bb3c8e92
This commit is contained in:
Tobias Dubois
2010-12-15 11:35:30 +01:00
committed by Johan Redestig
parent 0748a56987
commit defdb1e491
3 changed files with 15 additions and 2 deletions

View File

@@ -23033,6 +23033,7 @@ package android.view {
method public void getDrawingRect(android.graphics.Rect);
method public long getDrawingTime();
method public boolean getFilterTouchesWhenObscured();
method public void getFocusRect(android.graphics.Rect);
method public java.util.ArrayList<android.view.View> getFocusables(int);
method public void getFocusedRect(android.graphics.Rect);
method public boolean getGlobalVisibleRect(android.graphics.Rect, android.graphics.Point);

View File

@@ -181,8 +181,8 @@ public class FocusFinder {
// only interested in other non-root views
if (focusable == focused || focusable == root) continue;
// get visible bounds of other view in same coordinate system
focusable.getDrawingRect(mOtherRect);
// get focus bounds of other view in same coordinate system
focusable.getFocusRect(mOtherRect);
root.offsetDescendantRectToMyCoords(focusable, mOtherRect);
if (isBetterCandidate(direction, focusedRect, mOtherRect, mBestCandidateRect)) {

View File

@@ -7129,6 +7129,18 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
/**
* When searching for a view to focus this rectangle is used when considering if this view is
* a good candidate for receiving focus.
*
* By default, the rectangle is the {@link #getDrawingRect}) of the view.
*
* @param r The rectangle to fill in, in this view's coordinates.
*/
public void getFocusRect(Rect r) {
getDrawingRect(r);
}
/**
* Utility method to retrieve the inverse of the current mMatrix property.
* We cache the matrix to avoid recalculating it when transform properties
* have not changed.