2011-09-29 2 views
30

У меня есть редактировать текст:Отключить автофокус на редактирования текста

<LinearLayout android:id="@+id/linearLayout7" android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:id="@+id/editText1" android:text="3"> 
      <requestFocus></requestFocus> 
     </EditText> 
     <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button2"></Button> 
    </LinearLayout> 

, а затем некоторые другие вещи под

Проблема у меня в том, что правильно, когда приложение начинает фокус на input, я не хочу, чтобы фокус находился на входе сразу, когда приложение запускается.

Я попытался удалить

<requestFocus></requestFocus> 

вещь, и это ничего не делать.

+0

Set андроида: фокусируемый = «ложь». Он не будет фокусироваться на вашем EditText –

+1

, который будет неуправляемым навсегда? теперь, даже если я нажму на текстовое поле, он не будет сфокусирован. Я хочу сосредоточиться при нажатии, а не автоматически, когда приложение запустится – Saad

+1

вы можете сначала начать с получения идентификатора кнопки и установить фокус на кнопку в вашем коде .... – Hanry

ответ

88

Добавьте элементы android:focusable="true" и android:focusableInTouchMode="true" в родительский макет EditText следующим образом;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout7" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:focusable="true" android:focusableInTouchMode="true"> 

Я думаю, это должно вам помочь.

+7

nope, ничего не сделал – Saad

+1

@Saad: Он работает. Я протестировал его, прежде чем публиковать его здесь. Храните элемент в верхней части файла XML. BTW, на каком уровне API (или версии Android) вы разрабатываете? – Mudassir

+1

хорошо. Можете ли вы объяснить, какой андроид: focusable и android: focusableInTouchMode используется для (я имею в виду разницу и использование). – Anoop

3

NO Больше работы ... просто добавьте android: windowSoftInputMode = "stateAlwaysHidden" к тегу деятельности файла Manifest.xml.

+0

Пожалуйста, объясните, что это делает и как это может помочь OP. Предложения без объяснений не помогают, даже если исправление может работать. – SuperBiasedMan

+0

https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft –

+0

См. Это .. приведенная выше ссылка ... –

1
<EditText 
     android:id="@+id/input" 
     android:layout_width="0dp" 
     android:layout_height="48dp" 
     android:focusable="false" 
     android:focusableInTouchMode="false" /> 

detailInputView = (EditText) debugToolsView.findViewById(R.id.input); 
    detailInputView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      detailInputView.setFocusable(true); 
      detailInputView.setFocusableInTouchMode(true); 
      return false; 
     } 
    }); 
+0

Но это также не помогло сфокусироваться на редактировании текстового поля, это просто изменило способ загрузки элемента на устройстве, хотя оно работает – HSL

0

Просто добавьте следующие строки в ваш основной вид макета XML-тег:

android:focusableInTouchMode="true" 
0

Hei Lee,

Есть несколько способов сделать это, Mudassir есть дать путь к вам для этого.

Если идея не работает, то не только простые thing-

В вашем AndroidManifest>Activity добавить этот простой код:

android:windowSoftInputMode="stateHidden" 

Ничего нужно сделать в EditText в XML, все будет работать и фокус не появится.

Посмотрите реальный жизненный пример кода:

<activity 
     android:name=".MainActivity" 
     android:windowSoftInputMode="stateHidden" 
     android:label="@string/app_name" 
     > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 
0
<LinearLayout 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:layout_width="0px" 
    android:layout_height="0px" /> 

<EditText android:text="" 
    android:id="@+id/EditText01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="@string/hint"> 
</EditText> 

Нет другого кодирования требуется, это простое и ясное решение.

2

Если вы хотите очистить фокус по умолчанию на текст редактирования используйте следующие 2 атрибуты

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

внутри родительского Linear макета.

, например:

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


    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="email id" 
     android:inputType="textEmailAddress" 
     android:maxLines="1" 
    /> 

</LinearLayout> 

Если вы хотите, чтобы скрыть клавиатуру на создание деятельности использовать эти атрибуты внутри манифеста файла активности тега , например:

<activity 
    android:configChanges="screenSize|orientation|keyboardHidden" 
    android:screenOrientation="portrait" 
    android:name=".activities.LoginActivity" 
    android:windowSoftInputMode="stateHidden|adjustResize"/> 

Если вы хотите, чтобы скрыть клавиатуру при нажатии кнопки или при возникновении какого-либо события используйте следующий код

public void onClick(View v) { 
       try { 
        //InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input 
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        if (imm.isAcceptingText()) { 
         imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
        } 
       } catch (NullPointerException e) { 
        Log.e("Exception", e.getMessage() + ">>"); 
       } 
        } 
       } catch (NullPointerException e) { 
        Log.e("Exception", e.getMessage() + ">>"); 
       } 

Если вы хотите снять фокус с редактированием текстовых полей после выхода активности

@Override 
    protected void onResume() { 
     super.onResume(); 
     mEmail.clearFocus(); 
     mPassword.clearFocus(); 
} 

И, наконец, если вы хотите, чтобы очистить данные в окне редактирования текстовых полей на представление использования формы

@Override 
    protected void onResume() { 
     super.onResume(); 
     mEmail.getText().clear(); 
     mPassword.getText().clear(); 
    } 
1

Вы можете использовать окно мягкого режима входа скрытый для скрытия клавиатуры и android:focusable="false" и android:focusableInTouchMode="true"

<activity 
    android:name=".MainActivity" 
    android:windowSoftInputMode="stateHidden" 
    android:label="@string/app_name" 
    > 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
Смежные вопросы