From 7ecc1081ab9b4e41e4b2aec7877aaaf8df29e611 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" <takaoka@google.com> Date: Fri, 27 Apr 2012 23:44:28 +0900 Subject: [PATCH] Fix calculation of more keys keyboard position based on key preview Bug: 6135881 Change-Id: Id1c4e2c13d13b474466cb9b42b425aa9f6f9448b --- .../keyboard_key_feedback_background_holo.xml | 24 ------- java/res/values-land/dimens.xml | 2 +- .../keyboard_key_feedback_background_holo.xml | 24 ------- .../keyboard_key_feedback_background_holo.xml | 24 ------- java/res/values/attrs.xml | 4 -- java/res/values/dimens.xml | 3 +- java/res/values/styles.xml | 6 -- .../inputmethod/keyboard/KeyboardView.java | 70 +++++++++++++------ .../keyboard/LatinKeyboardView.java | 20 ++++-- .../keyboard/MoreKeysKeyboard.java | 44 +++++++----- .../keyboard/MoreKeysKeyboardView.java | 6 +- .../suggestions/MoreSuggestionsView.java | 6 +- 12 files changed, 96 insertions(+), 137 deletions(-) delete mode 100644 java/res/values-hdpi/keyboard_key_feedback_background_holo.xml delete mode 100644 java/res/values-mdpi/keyboard_key_feedback_background_holo.xml delete mode 100644 java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml diff --git a/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml deleted file mode 100644 index 8ab32269d2..0000000000 --- a/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2011, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ ---> - -<resources> - <dimen name="keyboard_key_feedback_background_holo_width">46.67dp</dimen> - <dimen name="keyboard_key_feedback_background_holo_height">58.67dp</dimen> -</resources> diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 1157b27331..62597258c7 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -53,7 +53,7 @@ <fraction name="key_uppercase_letter_ratio">40%</fraction> <fraction name="key_preview_text_ratio">90%</fraction> <fraction name="spacebar_text_ratio">40.000%</fraction> - <dimen name="key_preview_offset">12.8dp</dimen> + <dimen name="key_preview_offset">0.0dp</dimen> <dimen name="key_preview_offset_ics">1.6dp</dimen> <!-- popup_key_height x -0.5 --> diff --git a/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml deleted file mode 100644 index 10fef3d480..0000000000 --- a/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2011, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ ---> - -<resources> - <dimen name="keyboard_key_feedback_background_holo_width">46dp</dimen> - <dimen name="keyboard_key_feedback_background_holo_height">58dp</dimen> -</resources> diff --git a/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml deleted file mode 100644 index fba602626d..0000000000 --- a/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2011, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ ---> - -<resources> - <dimen name="keyboard_key_feedback_background_holo_width">47dp</dimen> - <dimen name="keyboard_key_feedback_background_holo_height">57dp</dimen> -</resources> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 844b8e96d0..4bf5414a19 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -91,10 +91,6 @@ <attr name="keyPreviewLeftBackground" format="reference" /> <!-- The background for the right edge key press feedback. --> <attr name="keyPreviewRightBackground" format="reference" /> - <!-- The width of rectangle part of the key press feedback background. --> - <attr name="keyPreviewBackgroundWidth" format="dimension" /> - <!-- The height of rectangle part of the key press feedback background. --> - <attr name="keyPreviewBackgroundHeight" format="dimension" /> <!-- The text color for key press feedback. --> <attr name="keyPreviewTextColor" format="color" /> <!-- Vertical offset of the key press feedback from the key. --> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 7eb57c3cfb..d8d58dfa01 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -27,7 +27,6 @@ <dimen name="popup_key_height">52.8dp</dimen> - <dimen name="more_keys_keyboard_horizontal_edges_padding">16dp</dimen> <dimen name="more_keys_keyboard_key_horizontal_padding">8dp</dimen> <fraction name="keyboard_top_padding">1.556%p</fraction> @@ -66,7 +65,7 @@ <fraction name="key_preview_text_ratio">82%</fraction> <fraction name="spacebar_text_ratio">33.735%</fraction> <dimen name="key_preview_height">80dp</dimen> - <dimen name="key_preview_offset">16.0dp</dimen> + <dimen name="key_preview_offset">-8.0dp</dimen> <dimen name="key_label_horizontal_padding">4dp</dimen> <dimen name="key_hint_letter_padding">1dp</dimen> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 1f8c37550c..b3c921e9eb 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -108,8 +108,6 @@ </style> <style name="MoreKeysKeyboardPanelStyle"> <item name="android:background">@drawable/keyboard_popup_panel_background</item> - <item name="android:paddingLeft">@dimen/more_keys_keyboard_horizontal_edges_padding</item> - <item name="android:paddingRight">@dimen/more_keys_keyboard_horizontal_edges_padding</item> </style> <style name="SuggestionsStripBackgroundStyle"> <item name="android:background">@drawable/keyboard_suggest_strip</item> @@ -311,8 +309,6 @@ <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_ics</item> <item name="keyPreviewLeftBackground">@drawable/keyboard_key_feedback_left_ics</item> <item name="keyPreviewRightBackground">@drawable/keyboard_key_feedback_right_ics</item> - <item name="keyPreviewBackgroundWidth">@dimen/keyboard_key_feedback_background_holo_width</item> - <item name="keyPreviewBackgroundHeight">@dimen/keyboard_key_feedback_background_holo_height</item> <item name="keyPreviewTextColor">#FFFFFFFF</item> <item name="keyPreviewOffset">@dimen/key_preview_offset_ics</item> <item name="shadowColor">#00000000</item> @@ -346,8 +342,6 @@ </style> <style name="MoreKeysKeyboardPanelStyle.IceCreamSandwich"> <item name="android:background">@drawable/keyboard_popup_panel_background_holo</item> - <item name="android:paddingLeft">@dimen/more_keys_keyboard_horizontal_edges_padding_ics</item> - <item name="android:paddingRight">@dimen/more_keys_keyboard_horizontal_edges_padding_ics</item> </style> <style name="SuggestionsStripBackgroundStyle.IceCreamSandwich"> <item name="android:background">@drawable/keyboard_suggest_strip_holo</item> diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 0d2e9f0ad4..9be193ba73 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -272,8 +272,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { public final Drawable mPreviewBackground; public final Drawable mPreviewLeftBackground; public final Drawable mPreviewRightBackground; - public final int mPreviewBackgroundWidth; - public final int mPreviewBackgroundHeight; public final int mPreviewTextColor; public final int mPreviewOffset; public final int mPreviewHeight; @@ -283,6 +281,31 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { private final float mPreviewTextRatio; private final float mKeyLetterRatio; + // The graphical geometry of the key preview. + // <-width-> + // +-------+ ^ + // | | | + // |preview| height (visible) + // | | | + // + + ^ v + // \ / |offset + // +-\ /-+ v + // | +-+ | + // |parent | + // | key| + // +-------+ + // The background of a {@link TextView} being used for a key preview may have invisible + // paddings. To align the more keys keyboard panel's visible part with the visible part of + // the background, we need to record the width and height of key preview that don't include + // invisible paddings. + public int mPreviewVisibleWidth; + public int mPreviewVisibleHeight; + // The key preview may have an arbitrary offset and its background that may have a bottom + // padding. To align the more keys keyboard and the key preview we also need to record the + // offset between the top edge of parent key and the bottom of the visible part of key + // preview background. + public int mPreviewVisibleOffset; + public int mPreviewTextSize; public int mKeyLetterSize; public final int[] mCoordinates = new int[2]; @@ -298,10 +321,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { setAlpha(mPreviewBackground, PREVIEW_ALPHA); setAlpha(mPreviewLeftBackground, PREVIEW_ALPHA); setAlpha(mPreviewRightBackground, PREVIEW_ALPHA); - mPreviewBackgroundWidth = a.getDimensionPixelSize( - R.styleable.KeyboardView_keyPreviewBackgroundWidth, 0); - mPreviewBackgroundHeight = a.getDimensionPixelSize( - R.styleable.KeyboardView_keyPreviewBackgroundHeight, 0); mPreviewOffset = a.getDimensionPixelOffset( R.styleable.KeyboardView_keyPreviewOffset, 0); mPreviewHeight = a.getDimensionPixelSize( @@ -838,13 +857,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { } } - @Override - public void showKeyPreview(PointerTracker tracker) { - if (mShowKeyPreviewPopup) { - showKey(tracker); - } - } - @Override public void dismissKeyPreview(PointerTracker tracker) { mDrawingHandler.dismissKeyPreview(mDelayAfterPreview, tracker); @@ -861,7 +873,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { keyPreview, ViewLayoutUtils.newLayoutParam(mPreviewPlacer, 0, 0)); } - private void showKey(PointerTracker tracker) { + @Override + public void showKeyPreview(PointerTracker tracker) { + if (!mShowKeyPreviewPopup) return; + final TextView previewText = tracker.getKeyPreviewText(); // If the key preview has no parent view yet, add it to the ViewGroup which can place // key preview absolutely in SoftInputWindow. @@ -878,8 +893,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { return; final KeyPreviewDrawParams params = mKeyPreviewDrawParams; - final int keyDrawX = key.mX + key.mVisualInsetsLeft; - final int keyDrawWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight; final String label = key.isShiftedLetterActivated() ? key.mHintLabel : key.mLabel; // What we show as preview should match what we show on a key top in onBufferDraw(). if (label != null) { @@ -902,13 +915,24 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { previewText.measure( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - final int previewWidth = Math.max(previewText.getMeasuredWidth(), keyDrawWidth - + previewText.getPaddingLeft() + previewText.getPaddingRight()); + final int keyDrawWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight; + final int previewWidth = previewText.getMeasuredWidth(); final int previewHeight = params.mPreviewHeight; + // The width and height of visible part of the key preview background. The content marker + // of the background 9-patch have to cover the visible part of the background. + params.mPreviewVisibleWidth = previewWidth - previewText.getPaddingLeft() + - previewText.getPaddingRight(); + params.mPreviewVisibleHeight = previewHeight - previewText.getPaddingTop() + - previewText.getPaddingBottom(); + // The distance between the top edge of the parent key and the bottom of the visible part + // of the key preview background. + params.mPreviewVisibleOffset = params.mPreviewOffset - previewText.getPaddingBottom(); getLocationInWindow(params.mCoordinates); - int previewX = keyDrawX - (previewWidth - keyDrawWidth) / 2 + params.mCoordinates[0]; - final int previewY = key.mY - previewHeight - + params.mCoordinates[1] + params.mPreviewOffset; + // The key preview is horizontally aligned with the center of the visible part of the + // parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and + // the left/right background is used if such background is specified. + int previewX = key.mX + key.mVisualInsetsLeft - (previewWidth - keyDrawWidth) / 2 + + params.mCoordinates[0]; if (previewX < 0) { previewX = 0; if (params.mPreviewLeftBackground != null) { @@ -920,6 +944,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { previewText.setBackgroundDrawable(params.mPreviewRightBackground); } } + // The key preview is placed vertically above the top edge of the parent key with an + // arbitrary offset. + final int previewY = key.mY - previewHeight + params.mPreviewOffset + + params.mCoordinates[1]; // Set the preview background state previewText.getBackground().setState( diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java index 84564c87af..aeca839f1d 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java @@ -527,9 +527,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke final MoreKeysKeyboardView moreKeysKeyboardView = (MoreKeysKeyboardView)container.findViewById(R.id.more_keys_keyboard_view); - final Keyboard parentKeyboard = getKeyboard(); - final Keyboard moreKeysKeyboard = new MoreKeysKeyboard.Builder( - this, parentKeyboard.mMoreKeysTemplate, parentKey, parentKeyboard).build(); + final Keyboard moreKeysKeyboard = new MoreKeysKeyboard.Builder(container, parentKey, this) + .build(); moreKeysKeyboardView.setKeyboard(moreKeysKeyboard); container.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -598,10 +597,19 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke mMoreKeysPanel = moreKeysPanel; mMoreKeysPanelPointerTrackerId = tracker.mPointerId; - final Keyboard keyboard = getKeyboard(); - final int pointX = (mConfigShowMoreKeysKeyboardAtTouchedPoint) ? tracker.getLastX() + final boolean keyPreviewEnabled = isKeyPreviewPopupEnabled() && !parentKey.noKeyPreview(); + // The more keys keyboard is usually horizontally aligned with the center of the parent key. + // If showMoreKeysKeyboardAtTouchedPoint is true and the key preview is disabled, the more + // keys keyboard is placed at the touch point of the parent key. + final int pointX = (mConfigShowMoreKeysKeyboardAtTouchedPoint && !keyPreviewEnabled) + ? tracker.getLastX() : parentKey.mX + parentKey.mWidth / 2; - final int pointY = parentKey.mY - keyboard.mVerticalGap; + // The more keys keyboard is usually vertically aligned with the top edge of the parent key + // (plus vertical gap). If the key preview is enabled, the more keys keyboard is vertically + // aligned with the bottom edge of the visible part of the key preview. + final int pointY = parentKey.mY + (keyPreviewEnabled + ? mKeyPreviewDrawParams.mPreviewVisibleOffset + : -parentKey.mVerticalGap); moreKeysPanel.showMoreKeysPanel( this, this, pointX, pointY, mMoreKeysWindow, mKeyboardActionListener); final int translatedX = moreKeysPanel.translateX(tracker.getLastX()); diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java index 7154086e2e..b6a06e1360 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java @@ -18,6 +18,7 @@ package com.android.inputmethod.keyboard; import android.graphics.Paint; import android.graphics.drawable.Drawable; +import android.view.View; import com.android.inputmethod.keyboard.internal.KeySpecParser.MoreKeySpec; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; @@ -251,30 +252,38 @@ public class MoreKeysKeyboard extends Keyboard { } } - public Builder(KeyboardView view, int xmlId, Key parentKey, Keyboard parentKeyboard) { - super(view.getContext(), new MoreKeysKeyboardParams()); - load(xmlId, parentKeyboard.mId); + /** + * The builder of MoreKeysKeyboard. + * @param containerView the container of {@link MoreKeysKeyboardView}. + * @param parentKey the {@link Key} that invokes more keys keyboard. + * @param parentKeyboardView the {@link KeyboardView} that contains the parentKey. + */ + public Builder(View containerView, Key parentKey, KeyboardView parentKeyboardView) { + super(containerView.getContext(), new MoreKeysKeyboardParams()); + final Keyboard parentKeyboard = parentKeyboardView.getKeyboard(); + load(parentKeyboard.mMoreKeysTemplate, parentKeyboard.mId); // TODO: More keys keyboard's vertical gap is currently calculated heuristically. // Should revise the algorithm. mParams.mVerticalGap = parentKeyboard.mVerticalGap / 2; mParentKey = parentKey; - final int previewWidth = view.mKeyPreviewDrawParams.mPreviewBackgroundWidth; - final int previewHeight = view.mKeyPreviewDrawParams.mPreviewBackgroundHeight; final int width, height; - // Use pre-computed width and height if these values are available and more keys - // keyboard has only one key to mitigate visual flicker between key preview and more - // keys keyboard. - final boolean validKeyPreview = view.isKeyPreviewPopupEnabled() - && !parentKey.noKeyPreview() && (previewWidth > 0) && (previewHeight > 0); - final boolean singleMoreKeyWithPreview = validKeyPreview - && parentKey.mMoreKeys.length == 1; + final boolean singleMoreKeyWithPreview = parentKeyboardView.isKeyPreviewPopupEnabled() + && !parentKey.noKeyPreview() && parentKey.mMoreKeys.length == 1; if (singleMoreKeyWithPreview) { - width = previewWidth; - height = previewHeight + mParams.mVerticalGap; + // Use pre-computed width and height if this more keys keyboard has only one key to + // mitigate visual flicker between key preview and more keys keyboard. + // Caveats for the visual assets: To achieve this effect, both the key preview + // backgrounds and the more keys keyboard panel background have the exact same + // left/right/top paddings. The bottom paddings of both backgrounds don't need to + // be considered because the vertical positions of both backgrounds were already + // adjusted with their bottom paddings deducted. + width = parentKeyboardView.mKeyPreviewDrawParams.mPreviewVisibleWidth; + height = parentKeyboardView.mKeyPreviewDrawParams.mPreviewVisibleHeight + + mParams.mVerticalGap; } else { - width = getMaxKeyWidth(view, parentKey, mParams.mDefaultKeyWidth); + width = getMaxKeyWidth(parentKeyboardView, parentKey, mParams.mDefaultKeyWidth); height = parentKeyboard.mMostCommonKeyHeight; } final int dividerWidth; @@ -288,8 +297,9 @@ public class MoreKeysKeyboard extends Keyboard { dividerWidth = 0; } mParams.setParameters(parentKey.mMoreKeys.length, parentKey.getMoreKeysColumn(), - width, height, parentKey.mX + parentKey.mWidth / 2, view.getMeasuredWidth(), - parentKey.isFixedColumnOrderMoreKeys(), dividerWidth); + width, height, parentKey.mX + parentKey.mWidth / 2, + parentKeyboardView.getMeasuredWidth(), parentKey.isFixedColumnOrderMoreKeys(), + dividerWidth); } private static int getMaxKeyWidth(KeyboardView view, Key parentKey, int minKeyWidth) { diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java index e60fc9598f..b4fa86dd57 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java @@ -141,10 +141,8 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel final MoreKeysKeyboard pane = (MoreKeysKeyboard)getKeyboard(); final int defaultCoordX = pane.getDefaultCoordX(); // The coordinates of panel's left-top corner in parentView's coordinate system. - final int x = pointX - defaultCoordX - container.getPaddingLeft() - + parentView.getPaddingLeft(); - final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom() - + parentView.getPaddingTop(); + final int x = pointX - defaultCoordX - container.getPaddingLeft(); + final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom(); window.setContentView(container); window.setWidth(container.getMeasuredWidth()); diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java index e64e7a6853..8a29dcc13b 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java @@ -149,10 +149,8 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel { final MoreSuggestions pane = (MoreSuggestions)getKeyboard(); final int defaultCoordX = pane.mOccupiedWidth / 2; // The coordinates of panel's left-top corner in parentView's coordinate system. - final int x = pointX - defaultCoordX - container.getPaddingLeft() - + parentView.getPaddingLeft(); - final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom() - + parentView.getPaddingTop(); + final int x = pointX - defaultCoordX - container.getPaddingLeft(); + final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom(); window.setContentView(container); window.setWidth(container.getMeasuredWidth()); -- GitLab