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

时间:2009-01-20 08:01:46

标签: android text popup android-edittext

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

1 个答案:

答案 0 :(得分: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"/>

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

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,  
                     WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

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

使用startActivityForResult启动文本条目活动。在该活动中调用setResult以使用this post中描述的技术返回在返回的意图中输入的文本字符串。

重写onActivityResult方法以侦听子活动的结果。

触发键盘曝光启动

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

首先将android:configChanges属性添加到纵向活动的清单条目中。应注册以收听keyboardHidden

android:configChanges="keyboardHidden"

在该活动中,覆盖onConfigurationChanged以启动文本条目活动。

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

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

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