【发布时间】:2010-10-02 09:42:20
【问题描述】:
我有一个应用程序,其主要布局为纵向(固定为纵向),并且有一个地方可以输入文本。我想像一个横向的弹出窗口一样启动,背景图像模糊不清。我知道有一个弹出窗口小部件,但任何旋转文本编辑框的想法都会很棒。在滑出键盘时将其旋转到纵向视图(仅限文本框)也可以,就像在键盘滑动上显示带有文本框的新屏幕一样。
【问题讨论】:
标签: android text popup android-edittext
我有一个应用程序,其主要布局为纵向(固定为纵向),并且有一个地方可以输入文本。我想像一个横向的弹出窗口一样启动,背景图像模糊不清。我知道有一个弹出窗口小部件,但任何旋转文本编辑框的想法都会很棒。在滑出键盘时将其旋转到纵向视图(仅限文本框)也可以,就像在键盘滑动上显示带有文本框的新屏幕一样。
【问题讨论】:
标签: android text popup android-edittext
解决您的问题的最简单方法是在一个单独的 dialog 主题 Activity 中显示您的 EditText,该 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 以使用 this post 中描述的技术返回在返回的 Intent 中输入的文本字符串。
重写onActivityResult 方法以监听来自子Activity 的结果。
在暴露的键盘上触发启动
您可以随时启动文本输入活动,但如果您希望在键盘暴露时始终显示它,您可以显式捕获此事件。
首先将android:configChanges 属性添加到肖像活动的清单条目中。它应该注册为监听keyboardHidden。
android:configChanges="keyboardHidden"
在该 Activity 中,覆盖 onConfigurationChanged 以启动文本输入 Activity。
@Override
public void onConfigurationChanged(Configuration newConfig) {
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
}
在启动文本输入 Activity 之前,您可能需要使用 newConfig 变量检查确认键盘是否暴露(而不是隐藏)。
您可能还想使用相同的技术在键盘隐藏时自动从文本输入活动返回。
【讨论】: