我正在制作一个显示popupWindow
种语言的键盘。在所有设备中,我都能在键盘外获得完美的popupWindow
,但在Android Pie中却无法在键盘外显示popupWindow
。
我想在连接蓝牙键盘时在键盘candidateView
之外显示弹出窗口。
我正在使用此代码
setClippingEnabled(false);
showAtLocation(anchor, Gravity.NO_GRAVITY, x, y);
有人有什么想法吗,这是什么问题?
这是演示应用-https://github.com/priyankagb/andoidpiepopupwindowdemo
查看屏幕截图
在Android Pie中,您可以在底部看到一小行,对于语言是popupWindow
左在饼下面,右在饼
答案 0 :(得分:2)
是的,我已经通过更改键盘的布局文件解决了问题
我在候选视图上方添加了一个虚拟视图
喜欢...
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/rlPredictionView" />
<RelativeLayout
android:id="@+id/rlPredictionView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/background_with_shadow_prediction_bar"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent">
...
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
比在InputMethodService
类中重写此方法
@Override
public void onComputeInsets(InputMethodService.Insets outInsets) {
super.onComputeInsets(outInsets);
outInsets.visibleTopInsets = candidateView.getRelativeView().getTop();
outInsets.contentTopInsets = candidateView.getRelativeView().getTop();
}
rlPredictionView
上方的虚拟视图将设置键盘visibleTopInsets
,并在此区域显示弹出窗口
此虚拟视图将允许通过触摸访问背景视图,因此用户看不到
答案 1 :(得分:0)
在您的popupWindow显示位置添加以下代码
[view].getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
public void onGlobalLayout(){
int screenHeight = [view].getRootView().getHeight();
Rect r = new Rect();
View view = getWindow().getDecorView();
view.getWindowVisibleDisplayFrame(r);
int keyBoardHeight = screenHeight - r.bottom;
if ( keyBoardHeight > 150 ){
// keyboard is showing, set popup window above keyboard height
} else {
// keyboard gone, restore popup window location to center screen
}
}
});
用您的视图替换
[view]