15

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

4

1 回答 1

39

解决您的问题的最简单方法是EditText在一个单独的dialog主题 Activity 中显示您,该 Activity 您从您的主(纵向固定)Activity 中启动。

EditText Activity 的方向不应固定,因此当您滑出键盘时它会按预期旋转。

创建文本输入活动

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

<activity android:name="TextEntryActivity" 
          android:label="My Activity" 
          android:theme="@android:style/Theme.Dialog"/>

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

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

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

用于startActivityForResult启动文本输入活动。在该 Activity 调用中,使用本文setResult中描述的技术返回在返回的意图中输入的文本字符串。

重写onActivityResult方法以侦听来自子 Activity 的结果。

在暴露的键盘上触发启动

您可以随时启动文本输入活动,但如果您想在键盘暴露时始终显示它,您可以显式捕获此事件。

首先将android:configChanges属性添加到肖像 Activity 的清单条目中。它应该被注册来监听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 变量检查确认键盘是否被暴露(而不是隐藏)。

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

于 2009-01-20T09:18:09.257 回答