ввод запретить android Остановить EditText от получения фокуса при запуске Activity



15 Answers

Является ли фактическая проблема, что вы просто не хотите, чтобы она была сосредоточена? Или вы не хотите, чтобы она отображала виртуальную клавиатуру в результате фокусировки EditText ? Я действительно не вижу проблемы с тем, что EditText сосредоточился на запуске, но определенно проблема в том, что окно softInput открывается, когда пользователь явно не запрашивает сосредоточиться на EditText (и в результате откройте клавиатуру).

Если это проблема виртуальной клавиатуры, см. Документацию элемента AndroidManifest.xml <activity> .

android:windowSoftInputMode="stateHidden" - всегда скрывать его при вводе активности.

android:windowSoftInputMode="stateUnchanged" - не меняйте его (например, не показывайте его, если он еще не показан, но если он был открыт при вводе активности, оставьте его открытым).

android показать клавиатуру

У меня есть Activity в Android, с двумя элементами:

  1. EditText
  2. ListView

Когда моя Activity начинается, EditText сразу имеет фокус ввода (мигающий курсор). Я не хочу, чтобы какой-либо элемент управления имел фокус ввода при запуске. Я старался:

EditText.setSelected(false);

Неудачно. Как я могу убедить EditText не выбирать себя при запуске Activity ?




Единственное решение, которое я нашел, это:

  • Создайте LinearLayout (я не знаю, будут ли работать другие типы Layout)
  • Установите атрибуты android:focusable="true" и android:focusableInTouchMode="true"

И EditText не получит фокус после начала деятельности




используя информацию, предоставленную другими плакатами, я использовал следующее решение:

в макете XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

in onCreate ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

и, наконец, in onResume ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}



Попробуйте clearFocus() вместо setSelected(false) . Каждый взгляд на Android имеет как фокусность, так и возможность выбора, и я думаю, что вы хотите просто очистить фокус.




Ни один из этих решений не работал для меня. То, как я исправляю автофокусировку, было:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>



Вы можете просто установить «focusable» и «focusable in touch mode» в значение true в первом TextView layout . Таким образом, когда активность начинается, TextView будет сфокусирован, но из-за своей природы вы не увидите ничего сосредоточенного на экране и, конечно же, клавиатура не будет отображаться ...




Мне нужно было очистить фокус от всех полей программно. Я просто добавил следующие два утверждения в мое основное определение макета.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Вот и все. Исправлена ​​ошибка. Спасибо, Серебро, за то, что указал мне в правильном направлении.




Простой ответ, просто добавьте это в родительский макет XML.

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



Попробуйте это перед первым редактируемым полем:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



Поздно, но, возможно, полезно. Создайте фиктивный EditText в верхней части макета, затем вызовите myDummyEditText.requestFocus() в onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Кажется, это ведет себя так, как я ожидаю. Нет необходимости обрабатывать изменения конфигурации и т. Д. Мне это нужно для Activity с длинным TextView (инструкциями).




Да, я сделал то же самое - создаю «фиктивный» линейный макет, который получает первоначальный фокус. Кроме того, я установил «следующие» идентификаторы фокуса, чтобы пользователь не мог больше сконфигурировать его после прокрутки:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

много работы только для того, чтобы избавиться от фокуса на взгляд ..

Спасибо




Для меня все, что работает на всех устройствах, это:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

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




Самое простое, что я сделал, это сосредоточиться на другом представлении в onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Это остановило мягкую клавиатуру, и в EditText не было курсора.




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



Вы можете достичь этого, создав манекен EditText с шириной и высотой 0dp , установленным в 0dp , и запросите фокус на этом представлении. Добавьте следующий фрагмент кода в свой XML-макет:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>





Related