【问题标题】:Android : clear focus on edittext when activity startsAndroid:活动开始时明确关注edittext
【发布时间】:2012-06-22 13:43:11
【问题描述】:

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

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

上面的代码在activity第一次启动时工作正常,如果再次启动相同的activity,自动edittext获取焦点。

谁能帮我解决这个问题。

【问题讨论】:

  • 焦点是重新开始还是从其他活动回来?
  • 如果从其他活动回来,edittext 获得焦点。
  • 尝试将清单文件中的android:windowSoftInputMode="stateHidden" 提供给该活动

标签: android android-edittext


【解决方案1】:

实际上,活动中的第一个可聚焦视图获得初始焦点。如果那恰好是您的EditText,它最初会被关注。

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

关注另一个视图

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

@Override
protected void onStart() {

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

在你的布局中制作一个早期视图可聚焦

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

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

    <EditText
        ...

【讨论】:

    【解决方案2】:
    If Come back from other activity edittext get focused. 
    

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

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

    【讨论】:

      【解决方案3】:

      如果您的 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" />
      

      【讨论】:

        【解决方案4】:

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

        android:windowSoftInputMode="stateHidden"
        

        完美运行。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            在 onStart() 方法中添加代码以移除焦点,它应该可以正常工作。

            【讨论】:

              【解决方案7】:

              在布局 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 对象

              【讨论】:

                【解决方案8】:

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

                android:focusableInTouchMode="true"
                

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-06-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多