У меня есть Activity
в Android, с двумя элементами:
EditText
ListView
Когда мой Activity
начинается, EditText
сразу же имеет фокус ввода (мигающий курсор). Я не хочу, чтобы какой-либо элемент управления имел фокус ввода при запуске. Я старался:
EditText.setSelected(false);
EditText.setFocusable(false);
Не повезло. Как я могу убедить EditText
не выбирать себя, когда Activity
начинается?
android
listview
android-edittext
focus
отметка
источник
источник
android:focusableInTouchMode="true"
!android:focusableInTouchMode="true"
охватываетandroid:focusable="true"
+ еще немного, так что в этом случае нетandroid:focusable="true"
необходимости, и его можно удалить. Кроме того, фиктивное представление может быть View вместо LinearLayout. Это экономит вычислительную мощность + спасает вас от некоторых предупреждений. Таким образом, я рекомендую заменить фиктивный вид на<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Действительно ли проблема в том, что вы просто не хотите, чтобы она вообще имела фокус? Или вы не хотите, чтобы он отображал виртуальную клавиатуру в результате фокусировки
EditText
? На самом деле я не вижу проблемы сEditText
фокусировкой на старте, но определенно проблема заключается в том, чтобы открывать окно softInput, когда пользователь явно не запрашивал фокусировку наEditText
(и в результате открывал клавиатуру).Если это проблема виртуальной клавиатуры, обратитесь к документации по
AndroidManifest.xml
элементу <activity> .android:windowSoftInputMode="stateHidden"
- всегда скрывать это при входе в активность.или
android:windowSoftInputMode="stateUnchanged"
- не меняйте его (например, не показывать, если оно еще не показано, но если оно было открыто при входе в упражнение, оставьте его открытым).источник
EditText
получению фокуса. На самом деле в нем четко говорится, что именно так вы предотвращаете автоматическое открытие IME программной клавиатуры в фокусе; потому что более вероятно, что большее беспокойство вызывает неожиданно всплывающая программная клавиатура, а не сам фокус. Если ваша проблема связана с тем, что выEditText
действительно сосредоточены, используйте ответ другого человека.Существует более простое решение. Установите эти атрибуты в родительском макете:
И теперь, когда действие начинается, этот основной макет получит фокус по умолчанию.
Кроме того, мы можем удалить фокус из дочерних представлений во время выполнения (например, после завершения дочернего редактирования), снова предоставив фокус основному макету, например так:
Хороший комментарий от Гийома Перро :
Действительно, мы видим, что
beforeDescendants
вViewGroup.initViewGroup()
методе установлено значение по умолчанию (Android 2.2.2). Но не равно 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Спасибо Гийому.
источник
Единственное решение, которое я нашел, это:
android:focusable="true"
иandroid:focusableInTouchMode="true"
И
EditText
не получит фокус после начала деятельностиисточник
Кажется, проблема связана со свойством, которое я вижу только в
XML form
макете.Обязательно удалите эту строку в конце объявления в
EditText
тегах XML:Это должно дать что-то вроде этого:
источник
используя информацию, предоставленную другими авторами, я использовал следующее решение:
в макете XML
в onCreate ()
и, наконец, в onResume ()
источник
Попробуйте clearFocus () вместо
setSelected(false)
. Каждое представление в Android имеет как фокусируемость, так и возможность выбора, и я думаю, что вы хотите просто очистить фокус.источник
myEditText.clearFocus(); myDummyLinearLayout.requestFocus();
вonResume
активность. Это гарантировало, что EditText не удерживал фокус при повороте телефона.Следующее действие остановит редактирование текста при создании фокуса, но захватите его при прикосновении к ним.
Таким образом, вы устанавливаете focusable в false в XML, но ключ находится в Java, который вы добавляете следующий слушатель:
Поскольку вы возвращаете false, т.е. не используете событие, поведение фокусировки будет продолжаться как обычно.
источник
Я попробовал несколько ответов по отдельности, но фокус все еще на EditText. Мне удалось решить эту проблему, используя два из нижеприведенного решения вместе.
(Ссылка от Silver https://stackoverflow.com/a/8639921/15695 )
и удалить
на EditText
(Ссылка от floydaddict https://stackoverflow.com/a/9681809 )
источник
Поздний, но самый простой ответ, просто добавьте это в родительский макет XML.
Upvote, если это помогло вам! Удачного кодирования :)
источник
Ни одно из этих решений не помогло мне. Способ, которым я исправляю автофокус, был:
источник
Простое решение: В
AndroidManifest
вActivity
использовании теговисточник
Вы можете просто установить «фокусируемый» и «фокусируемый в сенсорном режиме» на значение true в первом
TextView
изlayout
. Таким образом , когда активность ЗапускаетTextView
будет сфокусировано , но, в силу своей природы, вы будете видеть ничего не будет сфокусировано на экране и, конечно же , будет не клавиатура не отображается ...источник
Следующее работало для меня в
Manifest
. Написать ,источник
Мне нужно было очистить фокус со всех полей программно. Я просто добавил следующие два утверждения в мое основное определение макета.
Вот и все. Исправил мою проблему мгновенно. Спасибо, Сильвер, за то, что указал мне правильное направление.
источник
Добавьте
android:windowSoftInputMode="stateAlwaysHidden"
в тег активностиManifest.xml
файла.Источник
источник
Если у вас есть другой взгляд на вашу деятельность, например
ListView
, вы также можете сделать:в вашем,
onResume()
чтобы захватить фокус сeditText
.Я знаю, что на этот вопрос ответили, но просто предоставили альтернативное решение, которое сработало для меня :)
источник
Попробуйте это перед вашим первым редактируемым полем:
источник
Добавьте следующее в
onCreate
методе:источник
Поскольку я не люблю загрязнять XML чем-то, что связано с функциональностью, я создал этот метод, который «прозрачно» отбирает фокус у первого фокусируемого представления, а затем при необходимости убирает сам себя!
источник
Поздно, но, возможно, полезно. Создайте фиктивный EditText в верхней части макета, затем позвоните
myDummyEditText.requestFocus()
вonCreate()
Это, кажется, ведет себя как я ожидаю. Не нужно обрабатывать изменения конфигурации и т. Д. Мне это нужно для Activity с длинным TextView (инструкции).
источник
Напишите эту строку в вашем макете для родителей ...
источник
Да, я сделал то же самое - создал «фиктивную» линейную схему, которая получает первоначальный фокус. Кроме того, я установил «следующие» идентификаторы фокуса, чтобы пользователь больше не мог фокусироваться после прокрутки:
много работы просто чтобы избавиться от упора на вид ..
Спасибо
источник
Для меня то, что работает на всех устройствах, это:
Просто поместите это как представление перед проблемным сфокусированным представлением, и все.
источник
Самое простое, что я сделал, это установил фокус на другое представление в onCreate:
Это остановило всплывающую программную клавиатуру, и в EditText не мигало курсор.
источник
Это идеальное и самое простое решение. Я всегда использую это в своем приложении.
источник
источник
Запишите этот код в
Manifest
файл там,Activity
где вы не хотите открывать клавиатуру.Файл манифеста:
источник
В
onCreate
вашей деятельности, просто добавьте использованиеclearFocus()
в свой элемент EditText. Например,И если вы хотите перевести фокус на другой элемент, используйте его
requestFocus()
. Например,источник
Я использую следующий код, чтобы не дать EditText украсть фокус при нажатии моей кнопки.
Как правило, скрыть текст редактирования и затем показать его снова. Это работает для меня, так как EditText не отображается, поэтому не имеет значения, показывает ли он.
Вы можете попытаться скрыть и показать его последовательно, чтобы увидеть, поможет ли это потерять фокус.
источник