如何以编程方式设置和删除专注于单击按钮编辑文本

时间:2014-09-30 05:04:04

标签: android android-edittext focus

我有一个编辑文本,我想在点击一个按钮时设置焦点,并且在按下输入或完成按下软键盘后编辑我的状态我想再次移除焦点并向服务器发送请求。

这是我在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;
        }
    });

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

5 个答案:

答案 0 :(得分:5)

我觉得你很困惑设置焦点,显示和隐藏键盘,所以试试我的答案:

 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;
    }
});

答案 1 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<强>编程方式:

edittext.requestFocus();

通过xml:

<EditText...>
    <requestFocus />
</EditText>

答案 2 :(得分:0)

试试这个:

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

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

答案 3 :(得分:0)

对EditText使用setFocus

editText1.setFocusable(true);

答案 4 :(得分:0)

你可以将它添加到onCreate,它会在每次激活开始时隐藏键盘你也可以以编程方式将焦点改为另一个项目。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);