以编程方式在后台具有GL视图的软键盘上的EditText

我正在做一个游戏,我想在软键盘上方popup一个EditText位置。

这是我的代码在我的主要活动中构buildView Hierarchy时的样子:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); viewGroup = new RelativeLayout(this); viewGroup.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); view = new GameView(this); RelativeLayout.LayoutParams vLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); vLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); view.setLayoutParams(vLayoutParams); viewGroup.addView(view); editText = new GameEditText(this); RelativeLayout.LayoutParams etLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); etLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); editText.setGravity(Gravity.BOTTOM); editText.setLayoutParams(etLayoutParams); viewGroup.addView(editText); setContentView(viewGroup); 

这里是我的AndroidManifest.xml(这个部分的问题):

 <activity android:name="app.ember.MainActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensorLandscape" android:windowSoftInputMode="adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

额外的信息:

  • GameView =是一个GLSurfaceView
  • GameEditText =是一个EditText
  • 如果我注释掉第一行(getWindow()。addFlags …),那么游戏视图向上平移,视图不可见,除非我开始input东西。
  • 将第一行留在游戏中将不会平移,但不会向上移动editText字段,键盘将覆盖editText字段

有什么build议么?

这里有一些奇特的截图:

游戏没有键盘:

没有键盘的游戏

键盘和WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS游戏 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS设置(它在监视器中显示层结构的外观):

显示器的键盘

游戏与键盘和那些标志未设置。 在这里输入图像说明

这是所需的输出: 期望的输出

Solutions Collecting From Web of "以编程方式在后台具有GL视图的软键盘上的EditText"

Editbox作为父级底部。

 android:layout_alignParentBottom="true" 

并在清单文件中进行软inputadjustResize/Pan

 android:windowSoftInputMode="adjustResize" 

“adjustResize”:总是调整活动的主窗口,为屏幕上的软键盘腾出空间。

“adjustPan”:活动的主窗口不调整为软键盘腾出空间。 相反,窗口的内容自动平移,以便当前焦点永远不会被键盘遮挡,用户总是可以看到他们正在input的内容。 这通常不如resize,因为用户可能需要closures软键盘才能与窗口的遮蔽部分进行交互。

检查这个更多

在清单中添加

机器人:windowSoftInputMode = “adjustPan”

它会自动调整您的编辑文本下方的键盘