Android EditText с переносом слов, но без трудных возвратов - PullRequest
10 голосов
/ 13 января 2012

Если я установил SingleLine = true для виджета EditText, я получу однострочный элемент управления для редактирования, который не позволяет вводить жесткие возвраты пользователем (нажатие Enter перемещает в следующее поле вместо вставки новой строки),Если я не установлю SingleLine = true, пользователь может вставить жесткие возвраты.

Если я установлю layout_height = "wrap_content", элемент управления EditText будет расти вертикально, чтобы показать весь текст.Однако это происходит только в том случае, если для SingleLine не установлено значение true.

Итак, мой вопрос: возможно ли получить перенос слов и изменение размера по вертикали, не позволяя пользователю вводить жесткие разрывы строк?Думаю, я мог бы перехватить нажатие клавиши ввода, но тогда мне также пришлось бы искать другие способы, которыми они могли бы туда попасть (копирование / вставка, не уверен, что еще?).Есть ли простой способ сделать это с помощью правильной комбинации свойств?

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

Ответы [ 3 ]

12 голосов
/ 17 мая 2012

Я тоже искал что-то для этого.Единственное решение, которое я нашел, состояло в том, чтобы расширить EditText следующим образом:

package com.kylemilligan.test;

import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;

public class NoNewlineEditText extends EditText
{

    public NoNewlineEditText(Context context) {
        super(context);
    }

    public NoNewlineEditText(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }    

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs)
    {
        InputConnection connection = super.onCreateInputConnection(outAttrs);
        int imeActions = outAttrs.imeOptions & EditorInfo.IME_MASK_ACTION;
        if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0)
        {
            // clear the existing action
            outAttrs.imeOptions ^= imeActions;
            // set the DONE action
            outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE;
        }
        if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0)
        {
            outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
        }
        return connection;
    }
}

И затем в XML использовать как:

        <com.kylemilligan.test.NoNewlineEditText
            android:id="@+id/noNewLineText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|left"
            android:imeOptions="actionDone"
            android:minLines="5" />

Надеюсь, это поможет!

3 голосов
/ 04 августа 2014

Меня это заинтересовало, и я понял, что встроенное приложение обмена сообщениями Android обернуло текст без клавиши ввода на программной клавиатуре. Согласно исходному макету здесь , это делается с помощью следующих параметров. Не все нужны; Я считаю, что ключ должен иметь textShortMessage, textMultiLine и flagNoEnterAction:

android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
android:imeOptions="actionSend|flagNoEnterAction"
0 голосов
/ 12 декабря 2016
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
//This will treat Enter as Done instead of new line:
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

And in XML:
android:inputType="textMultiLine"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...