8

我的应用中有一些设置页面。一旦活动直接开始,它就会专注于编辑文本,我使用以下代码来清除焦点。

<RelativeLayout 
     android:id="@+id/RequestFocusLayout"
     android:focusable="true"
     android:focusableInTouchMode="true"
     android:layout_width="0px"
     android:layout_height="0px"/>

在java代码中

 RelativeLayout focuslayout = (RelativeLayout) findViewById(R.id.RequestFocusLayout);
 focuslayout.requestFocus();

上面的代码在活动第一次开始时工作正常,如果相同的活动再次开始,自动编辑文本获得焦点。

谁能帮我解决这个问题。

4

8 回答 8

13

实际上,活动中的第一个可聚焦视图接收初始焦点。如果那恰好是您的EditText,它将最初集中。

如果你不想这样,这里是你的选择:

聚焦另一个视图

以编程方式确定您希望最初关注的视图。

@Override
protected void onStart() {

    super.onStart();
    findViewById( R.id.yourOtherViewId ).requestFocus();
}

使布局中的早期视图可聚焦

如果您宁愿它看起来好像“没有视图具有初始焦点”,您可以使父视图组成为焦点。在以下示例中,我LinearLayout通过设置使我的焦点android:focusableInTouchMode="true"

<LinearLayout
    android:focusableInTouchMode="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
        ...
于 2013-04-18T19:53:19.157 回答
9
If Come back from other activity edittext get focused. 

将这些行放在 onStart() 或 onReusme()

  RelativeLayout focuslayout = (RelativeLayout) findViewById(R.id.RequestFocusLayout);
 focuslayout.requestFocus();
于 2012-06-22T14:12:39.753 回答
5

我使用了此页面中显示的解决方案,但它不起作用。将此属性添加到您的活动标记到 AndroidManifest 中:

android:windowSoftInputMode="stateHidden"

它完美地工作。

于 2013-03-22T11:16:09.837 回答
5

如果您的 EditText 是您的 RelativeLayout 的子级,您可以使用它android:descendantFocusability来请求焦点:

<RelativeLayout 
     android:id="@+id/RequestFocusLayout"
     android:focusable="true"
     android:layout_width="0px"
     android:layout_height="0px" 
     android:descendantFocusability="beforeDescendants" 
     android:focusableInTouchMode="true" />
于 2012-06-22T15:43:54.943 回答
4

我真的只android:focusableInTouchMode="true"在我的父母视图组中提供帮助。

于 2017-10-14T08:06:47.787 回答
0

在布局 XML 文件中,在 EditText 上指定一个 imeOption:

android:imeOptions="actionGo"

接下来,在 Activity 的 java 文件中为 EditText 添加一个动作监听器

mYourEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_GO) {
            // hide virtual keyboard
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0);
            return true;
        }
        return false;
    }
});

其中 mYourEditText 是一个 EditText 对象

于 2013-03-22T15:22:18.560 回答
0

将代码删除焦点放在 onStart() 方法中,它应该可以正常工作。

于 2012-06-22T13:45:10.367 回答
0

如果在启动 Activity 时,它会专注于屏幕上的 EditText。利用

android:focusableInTouchMode="true"

在包含该 EditText 的父级中。就像 EditText 在 RelativeLayout 中一样,在 RelativeLayout 中使用这一行。

于 2019-07-18T22:14:08.663 回答