Hi.  Sorry for not responding earlier -- I don't read this newsgroup daily.

Our app sends DUMP commands to the ViewServer class on the phone over a
socket and gets back a list of attributes for all views in the view
hierarchy of a phone app.  The code that actually creates these attributes
is the class ViewDebug.  Both these classes are in the package android.view
in the system image.  Our interface to ViewDebug is modelled after the
HierarchyViewer app that is part of the SDK.

There is a method, View.getLocationOnScreen(), that returns the x and y
coordinate of the view on the screen, not relative to the Window.  So I
modified the routine ViewDebug.dumpViewWithProperties() to add these two
values if they are available as follows:

private static boolean dumpViewWithProperties(Context context, View view,
        BufferedWriter out, int level) {

    try {
        for (int i = 0; i < level; i++) {
            out.write(' ');
        }
        out.write(view.getClass().getName());
        out.write('@');
        out.write(Integer.toHexString(view.hashCode()));
        out.write(' ');
        dumpViewProperties(context, view, out);
        if(((View) view).mAttachInfo != null) {
            int screenLocation[] = new int[2];
            ((View)view).getLocationOnScreen(screenLocation);
            writeEntry(out, "", "screenX", "",
Integer.toString(screenLocation[0]));
            writeEntry(out, "", "screenY", "",
Integer.toString(screenLocation[1]));
        }

        out.newLine();
    } catch (IOException e) {

Our app also computes the X and Y position of each view relative to the
Window.  We compare the actual screen position with the computed X and Y to
know when the view is not in its normal position and to know what its actual
position is.  You can catch the view in a transition period, for example
suppose the phone app has an EditText view near the bottom of the phone
window.  If a click happens in that EditText, the entire window containing
the view will be pushed up to make room for the keyboard and also keep the
EditText control exposed (since the purpose of the soft keyboard is to enter
text into the EditText control). if you ask to dump the view just after that
click, you can catch the view in transition.  Its screenY position will be
part way between where it was (at the bottom) and where it will be (above
the soft keyboard).  Of course the reverse is true if you click the BACK key
to remove the soft keyboard and ask for the dump right after that click.

Hope that helps.  Sorry for not responding earlier.

-Sam


On Thu, Jun 18, 2009 at 10:24 PM, tek <tek.bas...@gmail.com> wrote:

>
> Please post your solution, I'm interested in this as well.
>
>
> On Jun 13, 2:17 pm, sbq <sbq...@gmail.com> wrote:
> > Thanks anyway, I found what I'm looking for.
> >
> > -Sam
> >
> > On Jun 13, 8:34 am, sbq <sbq...@gmail.com> wrote:
> >
> >
> >
> > > Is there a way to get the window's information from the View?
> > > I would like to figure out that the window is shifted and by
> > > how much.
> >
> > > On Jun 12, 10:10 pm, Romain Guy <romain...@google.com> wrote:
> >
> > > > That's because the window is shifted, not the views within the
> window.
> > > > What HierarchyViewer shows is correct.
> >
> > > > On Fri, Jun 12, 2009 at 5:56 PM, sbq<sbq...@gmail.com> wrote:
> >
> > > > > Greetings,
> >
> > > > > I'm interfacing to ViewDebug to get the current position of views
> in
> > > > > the phone window.  I have an Android application with an EditText
> box
> > > > > near the bottom of the phone's window. When I click on that
> EditBox,
> > > > > the soft keyboard is displayed at the bottom of the window and the
> > > > > EditText box (and everything above it) is pushed up to make room.
> > > > > Soon after, while the keyboard is still visible, I have a program
> that
> > > > > connects to the phone and makes a DUMP request to ViewDebug.  I
> don't
> > > > > see this shift reflected in either the mTop or mScrollY of any
> Views
> > > > > brought back.
> >
> > > > > Is there a way learn about the new position of these Views after
> the
> > > > > soft keyboard is displayed?  Alternatively, is there a way to learn
> > > > > that the soft keyboard is currently being displayed and how far the
> > > > > phone window was scrolled up -- the amount of scrolling depends on
> > > > > which EditText control was clicked.
> >
> > > > > Since HierarchyViewer uses this same DUMP data, it also does not
> show
> > > > > that the Views have been shifted up and some views are not on the
> > > > > screen -- the absolute_y positions are what they would be if the
> > > > > keyboard was not there.
> >
> > > > > Thanks for any help.
> >
> > > > > -Sam
> >
> > > > --
> > > > Romain Guy
> > > > Android framework engineer
> > > > romain...@android.com
> >
> > > > Note: please don't send private questions to me, as I don't have time
> > > > to provide private support.  All such questions should be posted on
> > > > public forums, where I and others can see and answer them
> >
>

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

Reply via email to