花了很多时间解决这个问题,看起来很简单,但我真的很累,找不到解决办法。
我有一个活动,活动有 4 个 EditText 组件,其中 2 个具有包含列表的弹出菜单(AlertDialog),下一个 - 禁用编辑,最后一个 - 是可编辑的,并且当用户点击它。
另外,我的根 LinearLayout 有 LinearLayout,它包含在relativelayout 中。最后一项是需要AdvBanner。最后一个 LinearLayout(RelativeLayout) 与根布局的底部对齐。
XML 中描述它的部分:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="bottom"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="bottom">
<RelativeLayout
android:id="@+id/AdvLayoutReserveArea"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#FFFFFF"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="bottom" />
</LinearLayout>
当活动开始时,可编辑的 EditText 具有焦点GREEN边框和光标闪烁。几秒钟后,AdvBanner 被加载并显示。当它发生时,可编辑的 EditText 失去了焦点..从这一刻起,我的生活就像一场噩梦。
让我们一步步来看。
问题1。
If in 此时(当 Adv 加载并出现时)用户正在通过软键盘编辑 EditText 字段,焦点丢失,边框出现GRAY颜色,如果用户继续输入文本则没有结果 - 符号不会打印(EditText 中的光标太丢失)。
我认为任何用户都会感到恼火 - 当您输入文本时,光标处于非活动状态,因为在后台加载了一些广告并且它占据了自身的焦点。
为了解决这个问题,在加载 Adv 时的方法中(如图所示),我尝试通过 requestFocus 方法将焦点手动返回到 EditText。
public void onAdLoaded()
{
// TODO Auto-generated method stub
// add app specific code for this event here...
// called when an ad is successfully displayed on device
CountEdit1.requestFocus();
}
是的,光标返回到 EditText 字段,如果软键盘处于活动状态,用户仍然可以输入文本,但 EditText 字段的边框保持灰色...
NOTE:实际上我不确定聚焦的 EditText 的绿色和灰色边框之间的区别。绿色通常是当用户点击它时,而灰色,可能是当我们想要手动请求焦点时(使用 requestFocus() 等)
问题2。(作为解决问题#1 的结果)。
软键盘关闭后,如果用户点击可编辑的 EditText 字段,它将获得焦点,光标出现在里面,但再次显示软键盘没有任何反应!点击它不会显示软键盘,但看起来像复制模式下的编辑字段 - 当用户可以选择文本并将其剪切/复制到剪贴板时。
我的目标是第一眼看上去很简单。我只想保存光标并将焦点放在可编辑的 EditText 字段(CountEdit1)上,同时显示软键盘并且用户输入一些文本。
当用户点击 EditText 时的正常反应 - 像往常一样,只需向我显示软键盘即可!
我在这里阅读了所有问题,我结合了不同的方法(clearFocus、requestFocusFromTouch 等),只是没有足够的时间和空间来描述我为解决此问题所做的一切。主要问题如上所述。
希望得到帮助并解决问题...
提前致谢..