如何在创建Activity时使EditText不会聚焦

时间:2013-08-18 04:50:24

标签: java android focus android-edittext

在您投票并标记为重复之前,请阅读我的问题。

我已经阅读了讨论此问题的其他问题,所有这些问题都适用于我的布局,除了之外的第一个问题。

目前,这是我的onCreate方法的顶部:

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

^这样做至少在启动时不会弹出键盘,但EditText仍然关注。

这是XML的{​​{1}}:

EditText

这是我开展活动时的样子:

enter image description here

问题是,对于某些手机,当<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> 像这样关注时,他们无法写入。我想要专注。

我所做的工作适用于下一个布局,EditText没有关注,看起来更像是这样:

enter image description here

请注意,它的布局相同。这是用户返回此屏幕后的屏幕,这表示EditTexts没有任何问题,因为这是XML相同,但问题是XML是仅关注创建活动的时间。

我已经完成了研究,所有其他问题对我没有帮助(但他们确实帮助键盘不显示,谢天谢地)。我怎样才能使它在启动时EditText看起来像第二个截图,而不是第一个?

13 个答案:

答案 0 :(得分:285)

您可以设置布局的属性,如android:descendantFocusability="beforeDescendants"android:focusableInTouchMode="true"

示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/changePass"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="167dp"
        android:ems="10"
        android:imeOptions="flagNoExtractUi"
        android:inputType="textPassword"
        android:maxLength="30" >
    </EditText>

</RelativeLayout>

愿这个有用;)

答案 1 :(得分:16)

XML代码:

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:focusable="false"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>

Java代码:

EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            return false;
        }
    });
  

在xml中设置focusable false并通过代码

将其设置为true

答案 2 :(得分:12)

在你的main_layout中 添加这2行:

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>

答案 3 :(得分:2)

在onCreate()

中添加
/* Revoke setuid/setgid on chown */
if (!S_ISDIR(inode->i_mode) &&
    ((iap->ia_valid & ATTR_UID) || (iap->ia_valid & ATTR_GID))) {
    iap->ia_valid |= ATTR_KILL_PRIV;
    if (iap->ia_valid & ATTR_MODE) {
        /* we're setting mode too, just clear the s*id bits */
        iap->ia_mode &= ~S_ISUID;
        if (iap->ia_mode & S_IXGRP)
            iap->ia_mode &= ~S_ISGID;
    } else {
        /* set ATTR_KILL_* bits and let VFS handle it */
        iap->ia_valid |= (ATTR_KILL_SUID | ATTR_KILL_SGID);
    }
}

或onCreateView()

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

答案 4 :(得分:1)

XML代码

<EditText 
    android:imeOptions="flagNoExtractUi"
    android:focusable="false"
    />

onClickListerner中的Java代码

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);

答案 5 :(得分:1)

最好的解决方案是: https://stackoverflow.com/a/45139132/3172843

正确和简单解决方案是setFocusable为false, setFocusableInTouchMode为true 。因此,只有当用户触摸EditText

时,EditText才会获得焦点
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 0, 0])
y_scores = np.array([1, 0, 0, 0])
roc_auc_score(y_true, y_scores)

答案 6 :(得分:0)

可以使用android:focusable="false"来禁用它,但如果由于某种原因无效,那么您只需添加LinearLayout即可获得焦点而不会中断您的布局。

注意:Eclipse会给您一个错误,指出您的LinearLayout没用,因为它没有内容。你应该能够毫无问题地忽视它。

例如:

<LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="false"
    android:layout_width="0dp"
    android:layout_height="0dp"
    />
<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>
</LinearLayout>

答案 7 :(得分:0)

您可以通过编程方式执行此操作。在您的editText.setEnabled(false)活动方法中使用onStart()(而不是在onCreate()中 - 因为这是初始化GUI组件的一些方法)

答案 8 :(得分:0)

<activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateAlwaysHidden" />
  

机器人:windowSoftInputMode = “stateAlwaysHidden”

在Manifest.xml文件的activity标记中添加此行。当您单击TextEdit时,键盘将成为焦点。

答案 9 :(得分:0)

最简单的方法是添加

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

在Manifest.xml文件的activity标记中

答案 10 :(得分:0)

1)最简单的方法是,打开清单并将以下代码放在活动标记之间:

android:windowSoftInputMode="stateHidden"

2)将此属性放在父级布局中

android:focusable="true" 
android:focusableInTouchMode="true"

答案 11 :(得分:0)

在清单中,复制并粘贴下面的代码。

 <activity
   android:name=".LoginActivity"
   android:windowSoftInputMode="stateAlwaysHidden"/>

答案 12 :(得分:-7)

使用android:focusable="false"进行对焦禁用

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30"
 android:focusable="false" >

</EditText>