Как отобразить софт-клавиатуру, когда текст редактирования сфокусирован

Почти всегда плохой идеей использовать функцию fscanf(), поскольку она может оставить указатель файла в неизвестном месте при ошибке.

Я предпочитаю использовать fgets(), чтобы получить каждую строку, а затем sscanf(), что. Затем вы можете продолжить изучение строки, считанной, по вашему усмотрению. Что-то вроде:

#define LINESZ 1024
char buff[LINESZ];
FILE *fin = fopen ("infile.txt", "r");
if (fin != NULL) {
    while (fgets (buff, LINESZ, fin)) {
        /* Process buff here. */
    }
    fclose (fin);
}

fgets() похоже на то, что вы пытаетесь сделать, читаете строку, пока не встретите символ новой строки.

412
задан Ludovic Landry 9 May 2011 в 14:02
поделиться

8 ответов

Все решения, приведенные выше ( InputMethodManager , взаимодействие в OnFocusChangeListener.onFocusChange , подключенный к вашему EditText , работает нормально, если у вас есть одно редактирование в действии.

]

В моем случае у меня есть две правки.

 private EditText tvX, tvY;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 tvX.setOnFocusChangeListener(this);
    tvY.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) {       
    InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(tvX.hasFocus() || tvY.hasFocus()) {            
        imm.showSoftInput(v, 0);            
    } else {
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);         
    }       
};

Я заметил, что onFocusChange запускается для tvX с hasFocus = true (клавиатура показана), но затем для tvY с hasFocus = true (клавиатура скрыта) В конце концов, клавиатура не была видна.

Общее решение должно иметь правильную формулировку, если «показать клавиатуру, если текст EditText имеет фокус»

2
ответ дан Bartosz Bilicki 9 May 2011 в 14:02
поделиться

Верьте или нет, моя проблема с Soft Keyboard была решена, когда я обнаружил, что анимация Activity может отключить Soft Keyboard. Когда вы вызываете намерение с помощью

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

и

overridePendingTransition(0, 0);

, оно может скрыть программную клавиатуру, и нет способа показать это.

4
ответ дан Marvin Pinto 9 May 2011 в 14:02
поделиться

вызовите метод requestFocus () для editText в методе Activity () onCrete () и вызовите метод clearFocus () для того же editText при нажатии, выполненном на клавиатуре.

0
ответ дан Er Prajesh 9 May 2011 в 14:02
поделиться

Чтобы вызвать появление клавиатуры, используйте

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

Этот метод более надежен, чем прямой вызов InputMethodManager.

Чтобы закрыть его, используйте

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
149
ответ дан Community 9 May 2011 в 14:02
поделиться

Чтобы скрыть клавиатуру, используйте эту:

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

и чтобы показать клавиатуру:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
9
ответ дан Mubashar 9 May 2011 в 14:02
поделиться

Kotlin расширение для показа клавиатуры на фокусе.

Это - комбинация предыдущих ответов, который где или слишком длинный или неполный.

Это расширение отправляет выполнимое на очереди сообщений, которая показывает программируемую клавиатуру после запроса фокуса:

fun View.showSoftKeyboard() {
    post {
        if (this.requestFocus()) {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
        }
    }
}

Вызов это от любого представления при необходимости впоследствии:

editText.showSoftKeyboard()
0
ответ дан Alex Burdusel 4 November 2019 в 09:01
поделиться

Просто добавьте эту строку в своем представлении EditText:

android:isScrollContainer="true"

и TADA - клавиатура начала обнаруживаться автоматически!

я имел подобную проблему и обнаружил это простое и странное решение.

Как уже был упомянут здесь user3392439, появлением клавиатуры на фокус, так или иначе странно соединенный с присутствием компонента прокрутки в XML-файле.

Даже присутствие другой представление EditText, которое включает вышеупомянутую строку в том же XML, заставляет клавиатуру появиться, неважно, какой из EditTexts в настоящее время фокусируется.

, Если у Вас есть по крайней мере один видимый представление, включающее компонент прокрутки в Вашем XML-файле - клавиатура появится автоматически на фокусе.

, Если никакая прокрутка - затем необходимо нажать на EditText, чтобы заставить клавиатуру появиться.

3
ответ дан 22 November 2019 в 23:22
поделиться

Согласно этот ответ я использовал setSoftInputMode метод и overrided эти методы в DialogFragment:

@Override
public void onCancel(@NonNull DialogInterface dialog) {
    super.onCancel(dialog);
    requireDialog().getWindow().setSoftInputMode(InputMethodManager.HIDE_IMPLICIT_ONLY);
}

@Override
public void onStart() {
    super.onStart();
    requireDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}

@Override
public void onStop() {
    super.onStop();
    requireDialog().getWindow().setSoftInputMode(InputMethodManager.HIDE_IMPLICIT_ONLY);
}

я также сделал свой собственный подкласс DialogFragment с этими методами, поэтому когда Вы создаете другое диалоговое окно и наследовались этому классу, у Вас есть программируемая клавиатура, показал автоматически без любых других редактирований. Надежда это будет полезно для кого-то.

0
ответ дан 22 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: