Tencent Cloud Interactive Live 1.8のデモでは、ライブインターフェイスのソフトキーボードが入力ボックスをカバーします。元々のアイデアは、入力ボックスダイアログの位置を動的に設定することでしたが、デモで変更した後、で解決できます。 Xiaomi、Meizu、Huaweiおよびその他のマシンカバレッジの問題ですが、Samsungマシンのカバレッジの問題はまだあります。誰かがカバレッジの問題を解決した可能性がありますが、モニターのソフトキーボードが失敗しました。これは、ソフトキーボードダイアログが閉じられていないことを意味します。これが私の解決策です。上の最初の写真は次のとおりです。
質問1:ソフトキーボードがダイアログをカバーします
setContentViewの前に追加
//ソフトキーボード
がダイアログの入力ボックスをカバーしないようにしますgetWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
ソフトキーボードカバレッジの問題を解決できます。
質問2:入力ボックスが表示されたら、空白部分をクリックしてソフトキーボードとダイアログを閉じます
1.ダイアログのルートレイアウトをmatch_parentに変更します
2.古いコードのルートレイアウトの位置の監視を削除し、onTouchでルートレイアウトの監視イベントを増やします
質問3:入力ボックスを閉じるか、リターンキーを押しても、ダイアログが閉じません
手順1と2を完了すると、入力ボックスを閉じるか、リターンキーダイアログを押すと閉じられず、画面の下部に表示されます。このとき、ルートのイベントをリッスンする必要があります。レイアウトGlobalLayout
activity_live.xmlレイアウトにあり、一番上のレイアウトは
<include
android:id="@+id/invite_views"
layout="@layout/invite_views"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
現時点では、イベントのレイアウトを監視するだけで十分です。
注:OnGlobalLayoutListenerは、次の条件で応答します
。SoftInputModeがADJUST_RESIZEである場合、それ以外の場合、位置の変化を監視できません。
//软键盘的监听
findViewById(R.id.invite_views).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//获取当前界面可视部分
getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//获取屏幕的高度
int screenHeight = getWindow().getDecorView().getRootView().getHeight();
//此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数
int heightDifference = screenHeight - r.bottom;
if(heightDifference <= 0 && mLastDiff > 0){
//软键盘收起状态
Log.d("AAAA","软键盘 弹出之后收起了 Rect GlobalLayoutListener heightDifference="+heightDifference+",mLastDiff="+mLastDiff);
if(inputMsgDialog!=null && inputMsgDialog.isShowing()){
inputMsgDialog.dismiss();
}
}
mLastDiff = heightDifference;
}
});
この時点で、上記の問題は解決されているはずです。