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 -~----------~----~----~----~------~----~------~--~---