2014-09-30 93 views
2

我有一个编辑文本,并且一旦单击某个按钮并且在按下软键盘的输入或完成时编辑我的状态后,我想设置它的焦点我想再次移除焦点并向服务器发送请求。如何以编程方式设置和删除单击按钮上的编辑文本上的焦点

这里是XML我的编辑文本

<EditText 
       android:id="@+id/time_statusTV" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBottom="@+id/selectIBT" 
       android:layout_alignLeft="@+id/profile_name" 
       android:layout_toLeftOf="@+id/add_timeline_status_IBTN" 
       android:layout_toRightOf="@+id/image_profile" 
       android:background="@android:color/transparent" 
       android:focusable="false" 
       android:maxLines="2" 
       android:text="short description of \nyourself that can go\nover 2 lines." 
       android:textColor="@color/text_color_gray" 
       android:textSize="18sp" /> 

这里我在做什么按钮点击

case R.id.add_timeline_status_IBTN: 
     time_statusTV.setFocusable(true); 
     time_statusTV.requestFocus(); 

     break; 

这里是我的编辑文本的按键事件

time_statusTV = (EditText) rootView.findViewById(R.id.time_statusTV); 
    time_statusTV.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) 
        && (keyCode == KeyEvent.KEYCODE_ENTER)) { 

       // My code 

       time_statusTV.clearFocus(); 
      } 
      return false; 
     } 
    }); 

但是,当我点击按钮没有任何反应。

+0

不使用requestFocus()方法和clearFocus(),并检查我的答案,它的工作原理 – Sats 2014-09-30 05:16:30

回答

2

我想你混淆焦点设置和显示和隐藏键盘这样试试我的回答是:

case R.id.add_timeline_status_IBTN: 

    time_statusTV.setFocusable(true); 
    time_statusTV.requestFocus(); 
    InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(time_statusTV, 0); 

和清除它:

imm.hideSoftInputFromWindow(your edittext.getWindowToken(), 0);

使你的代码必须是这样的:

time_statusTV = (EditText) rootView.findViewById(R.id.time_statusTV); 
    time_statusTV.setOnKeyListener(new OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_ENTER)) { 


      imm.hideSoftInputFromWindow(time_statusTV.getWindowToken(), 0); 
      time_statusTV.clearFocus(); 
     } 
     return false; 
    } 
}); 
+0

当视图清除焦点时,框架试图将焦点放在顶部的第一个可调焦视图上。因此,如果这个视图是第一个可以关注焦点的视图,那么所有与清除焦点相关的回调都将被调用,之后框架将把焦点放在这个视图上。 – anshad 2016-02-11 05:57:39

0

试试这种方式,希望这会帮助你解决你的问题。

编程方式:

edittext.requestFocus(); 

通过xml:

<EditText...> 
    <requestFocus /> 
</EditText> 
+0

仍然没有任何反应 – Android 2014-09-30 05:08:09

+0

你是什么什么也没有发生呢? – 2014-09-30 05:09:34

+0

编辑文本没有得到重点 – Android 2014-09-30 05:15:48

0

试试这个:

editText.setFocusable(true);// to set focus on EditText 

    editText.setFocusable(false);// to remove focus from EditText 
0

使用的setFocus的EditText上

editText1.setFocusable(true); 
0

您可以将此添加到onCreate,并且每次活动开始时它都会隐藏键盘您还可以编程方式将焦点更改为另一个项目。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
相关问题