absolute_x and absolute_y are the position of a View relative to its
containing Window.  If the Window shifts (e.g., to accomodate the
soft keyboard IME), absolute_x and absolute_y of a View do not change,
the
the view is still in the same position with respect to its containing.

However, the View has moved to a new location on the screen and
its screen location can be obtained as I described.

On Jun 20, 9:31 am, Romain Guy <romain...@google.com> wrote:
> But HierarchyViewer *already* dumps these values, they're called
> "absolute_x" and "absolute_y".
>
>
>
> On Sat, Jun 20, 2009 at 8:09 AM, Samuel Quiring<sbq...@gmail.com> wrote:
> > 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
>
> --
> 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