requestFocus对EditText无法正常工作

时间:2012-07-01 00:00:34

标签: android android-layout focus cursor android-edittext

花了很多时间来解决问题,看起来很容易,但我真的很累,找不到解决方案。 我有一个Activity,活动有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具有绿色边框的焦点,光标闪烁。几秒钟后,加载并显示AdvBanner。当它发生时,可编辑的EditText失去了焦点..从这一刻起,我的生活就像一场噩梦。

让我们一步一步看。

问题1。 如果在 THOM MOMENT (当Adv加载并出现时)用户正在通过软键盘编辑EditText字段,焦点将丢失,边框将采用灰色颜色,如果用户继续键入文本没有结果 - 不打印符号(EditText中的CURSOR太丢失)。

我认为任何用户都会感到烦恼 - 当你输入文字时,光标处于非活动状态,因为在后台会加载一些adv并且它会自动聚焦。

为了解决这个问题,在加载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字段的边框保持灰色......

注意:实际上我不确定焦点EditText的GREEN和GRAY边框之间的区别.Green通常是在用户点击它时,而GRAY,可能是,当我们想要手动请求焦点(使用requestFocus()等)

问题2。(由于溶剂化问题#1)。 关闭软键盘后,如果用户点击可编辑的EditText字段,则会将焦点和光标显示在内部,但对于再次显示软键盘没有反应!点击它不显示软键盘,但看起来像复制模式中的编辑字段 - 当用户可以选择文本并将其剪切/复制到剪贴板时。

我的目标很容易初看。我只想保存光标并将焦点转移到可编辑的EditText字段(CountEdit1),同时显示软键盘并且用户键入一些文本。 当用户点击EditText时正常反应 - 通常只显示软键盘!

我在这里阅读了所有问题,我结合了不同的方法(clearFocus,requestFocusFromTouch等),只是没有足够的时间和空间来描述我试图解决的所有问题。主要问题如上所述。

希望得到帮助并解决问题...... 提前谢谢..

5 个答案:

答案 0 :(得分:16)

目标已经解决,解决方法比我想象的要容易。通过使用onClick()方法修复问题#2。出现使用clearFocus()和requestFocus()方法的软键盘的充分条件。

   CountEdit1.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v)
      {
              CountEdit1.clearFocus();
        CountEdit1.requestFocus();
      }
    });

当用户点击EditText字段时,会出现软键盘。 固定的。

答案 1 :(得分:7)

适合我:

InputMethodManager mgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
editField.requestFocus();
mgr.showSoftInput(editField, InputMethodManager.SHOW_IMPLICIT);

答案 2 :(得分:5)

userInput.post(new Runnable() {
            public void run() {
                userIdInput.requestFocus();

            }
        });

快速了解并确定问题是否仍未解决。

答案 3 :(得分:1)

在片段或活动中创建视图后,您应该请求焦点:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    CountEdit1.requestFocus();
}

答案 4 :(得分:0)

试试这个:

public void onAdLoaded() 
    {  
  final Handler handler = new Handler();
             handler.postDelayed(new Runnable() {
                 @Override
                 public void run() {
                     CountEdit1.requestFocus();
                     InputMethodManager mgr = (InputMethodManager) base.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                     mgr.showSoftInput(CountEdit1, InputMethodManager.SHOW_IMPLICIT);
                     CountEdit1.setSelection(CountEdit1.getText().length());
                 }
             },0);
}