Hmmm. What I thought I'd typed was:

...
the view is still in the same position with respect to its containing
window.

On Jun 20, 10:19 am, sbq <sbq...@gmail.com> wrote:
> 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