#android #android-activity #android-edittext #android-softkeyboard
#Android #android-активность #android-edittext #android-softkeyboard
Вопрос:
У меня есть действие опроса, которое состоит из таких параметров, как переключатель, флажок, текстовое поле. Я использую EditText для получения ответа пользователя для текстового поля. Я динамически раздуваю EditText из адаптера просмотра recycler. Но всякий раз, когда вызывается это действие, клавиатура также появляется с курсором в поле редактирования текста. Но я хочу, чтобы клавиатура открывалась только тогда, когда пользователь касается EditText. Я попробовал несколько возможных методов, но не сработал и нуждаюсь в вашей помощи. Заранее спасибо!!
fun showTextBox(answerLL : LinearLayout, currentItem : QuestionList, position: Int, draftOptions : MutableList<Draft>) {
answerLL.removeAllViews()
var optMaster : OptionMaster
answerLL.setPadding(0, 0, 55, 0)
val et = EditText(mActivity)
et.setMinLines(1);
et.setMaxLines(10);
et.setCursorVisible(true);
et.requestFocusFromTouch();
// et.requestFocus()
et.setFocusableInTouchMode(true)
val lp = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
et.setLayoutParams(lp);
et.setTextIsSelectable(true);
et.setGravity(Gravity.START);
et.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
et.setPaddingRelative(15, 7, 7, 7);
et.setPadding(15, 7, 7, 7);
et.setTextColor(Color.BLACK);
et.addTextChangedListener(object: TextWatcher{
override fun afterTextChanged(s: Editable?) {
textListener.textValueEntered(currentItem.questionMaster.qmID, s.toString())
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
})
for(draft in draftOptions){
if (draft.quesId == currentItem.questionMaster.qmID){
et.setText(draft.optValue)
}
}
answerLL.addView(et)
}
Комментарии:
1. Сделайте первое (сначала по вертикали) Текстовое поле или любой другой не редактируемый текст
focusable
. Ваш текст редактирования, вероятно, является первым фокусируемым элементом в макете, и именно поэтому открывается клавиатура. Или … копайте глубже и выясняйте, почему оно открывается.2. Но по умолчанию фокусируется первый фокусируемый элемент, и если он становится EditText, клавиатура будет отображаться. Простое решение — сделать что-то еще над ним (или перед ним) также фокусируемым. Более сложное решение состоит в том, чтобы определить, следует ли открывать клавиатуру и когда это произойдет, и программно закрывать клавиатуру до тех пор, пока она не будет открыта. Или измените фокусировку текста редактирования до тех пор, пока он не будет готов к приему ввода (например, когда действие завершит загрузку)
3. @vishnu jm когда вы добавляете текст редактирования, вы установили фокус редактирования текста на false, только таким образом вы можете достичь того, что вам нужно,
et.setFocusableInTouchMode(false); et.setFocusable(false);
Ответ №1:
проверьте свой windowSoftInputMode
атрибут в файле манифеста, теге activity