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