如何在屏幕上"显示"文本编辑框?

Chr*_*pix 15 android text popup android-edittext

我有一个具有纵向主要布局的应用程序(它固定为肖像),并且有一个地方可以输入文本.我希望像横向方向的弹出窗口一样启动,背景图像模糊不清.我知道有一个弹出窗口小部件,但任何旋转文本编辑框的想法都会很棒.当键盘滑出时将其旋转为纵向视图(仅限文本框)也可以工作,就像在键盘滑块上显示带有文本框的新屏幕一样.

Ret*_*ier 38

解决您问题的最简单方法是在主要(纵向修复)活动中启动EditText一个单独的dialog主题活动.

EditText Activity不应该固定其方向,因此当您滑出键盘时它将按照您的预期旋转.

创建文本输入活动

创建一个新的Activity,它只包含EditText View和你想要包含的任何其他内容(可能是OK/Cancel按钮,也许是标签?).在清单中设置其主题Theme.Dialog.

<activity android:name="TextEntryActivity" 
          android:label="My Activity" 
          android:theme="@android:style/Theme.Dialog"/>
Run Code Online (Sandbox Code Playgroud)

通过修改前景Activity(您的文本输入对话框)的Window属性来对对话框后面的活动进行模糊或模糊.在其中使用onCreate方法getWindow().setFlags将模糊应用于任何背景活动.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,  
                     WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Run Code Online (Sandbox Code Playgroud)

从文本输入活动启动和读取输入的值

使用startActivityForResult启动文本输入活动.在这一活动调用setResult返回使用中描述的技术返回意图内输入的文本字符串这个职位.

重写onActivityResult方法以侦听子Activity的结果.

在键盘上触发启动

您可以随时启动文本条目"活动",但如果要在键盘公开时始终显示它,则可以明确地捕获此事件.

首先将android:configChanges属性添加到纵向Activity的清单条目中.它应该注册听取keyboardHidden.

android:configChanges="keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

在该Activity中,覆盖onConfigurationChanged以启动文本条目Activity.

@Override
public void onConfigurationChanged(Configuration newConfig) {  
  Intent i = new Intent(this,TextEntryActivity.class);    
  startActivityForResult(i, STATIC_INTEGER_VALUE);
}
Run Code Online (Sandbox Code Playgroud)

在启动文本条目Activity之前,您可能需要使用newConfig变量检查确认键盘是否正在暴露(而不是隐藏).

您可能还希望使用相同的技术在隐藏键盘时自动从文本输入活动返回.