Android:在活动开始时明确关注edittext

时间:2012-06-22 13:43:11

标签: android android-edittext

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

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

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

任何人都可以帮我解决这个问题。

8 个答案:

答案 0 :(得分:11)

实际上,活动中第一个可聚焦视图会获得初始焦点。如果这恰好是您的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
        ...

答案 1 :(得分:7)

If Come back from other activity edittext get focused. 

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

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

答案 2 :(得分: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" />

答案 3 :(得分:5)

我使用了此页面中显示的解决方案,但它无效。将此属性添加到AndroidManifest中的activity标记:

android:windowSoftInputMode="stateHidden"

效果很好。

答案 4 :(得分:4)

我仅在父视图组中帮助android:focusableInTouchMode="true"

答案 5 :(得分:0)

使用代码删除onStart()方法中的焦点,它应该可以正常工作。

答案 6 :(得分: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对象

答案 7 :(得分:0)

如果启动活动,它将聚焦在屏幕上的EditText上。 使用

android:focusableInTouchMode="true"
包含该EditText的父级中的

。就像EditText位于RelativeLayout内一样,请在RelativeLayout中使用此行。