Jak ustawić pozycję kursora w EditText?

Są dwa EditText, podczas ładowania strony Tekst jest ustawiony w pierwszym EditText, więc teraz kursor będzie w miejscu początkowym EditText, chcę ustawić pozycję kursora w drugim EditText, który nie zawiera żadnych danych. Jak to zrobić?

Author: Bhavik Kamdar, 2011-11-07

17 answers

Gdzie pozycja jest int:

editText1.setSelection(position)
 396
Author: NotACleverMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-07 10:27:16

Zrobiłem tak aby ustawić pozycję kursora na koniec tekstu po programowej aktualizacji tekstu EditText tutaj etmsg jest EditText

etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
 91
Author: MKJParekh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-07 11:10:40

Jak ustawić pozycję kursora EditText w Androidzie

Poniżej znajduje się Ustaw kursor na Start W EditText:

 EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(0);

Poniżej znajduje się Ustaw kursor na koniec z EditText:

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());

Poniżej znajduje się kursor ustawiony po 2. pozycji znaku:

 EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(2);
 28
Author: IntelliJ Amiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 12:32:09

Chcę ustawić pozycję kursora w edittext, który nie zawiera danych

Jest tylko jedna pozycja w pustym edytorze, to setSeletion(0).

A może miałeś na myśli, że chcesz skupić się na swojej EditText, Kiedy Twoja aktywność się otworzy? W takim przypadku jego requestFocus()

 14
Author: Reno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-29 20:39:33

Użyj poniższego wiersza

e2.setSelection(e2.length());

e2 jest edytuj nazwę obiektu tekstowego

 10
Author: Syed Danish Haider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-31 08:15:18

Niech editText2 jest twoim drugim widokiem EditText .następnie umieść następujący fragment kodu w onResume()

editText2.setFocusableInTouchMode(true);
editText2.requestFocus();

Lub umieścić

<requestFocus />

W układzie xml drugiego widoku EditText.

 9
Author: monish george,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 10:12:29

Jakiś czas edytować kursor tekstu donot pojawia się w określonej pozycji, jeśli bezpośrednio używamy editText.setSelection(position);. W takim przypadku możesz spróbować

editText.post(new Runnable() {
                @Override
                public void run() {
                    editText.setSelection(string.length());
                }
            });
 6
Author: dev.sourabh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-16 13:03:41

setSelection(int index) metoda w Edittext powinna ci na to pozwolić.

 5
Author: Avinash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-03 08:46:41

Dla przypomnienia: jeśli używasz edittext.setSelection(), aby ustawić kursor, a nie działa ON podczas konfigurowania na przykład alertdialog, Upewnij się, że ustawisz selection() Po utworzeniu okna dialogowego

Przykład:

AlertDialog dialog = builder.show();
input.setSelection(x,y);
 4
Author: calav3ra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 13:51:35

Zapamiętaj wywołanie requestFocus() przed {[1] } dla edittext.

 2
Author: Dong Thang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 11:19:21

Ten kod pomoże Ci pokazać kursor w ostatniej pozycji edycji tekstu.

 editText.requestFocus();
 editText.setSelection(editText.length());
 2
Author: Kailas Bhakade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 05:09:24

Nie dostanę metody setSelection () bezpośrednio , więc zrobiłem jak poniżej i praca jak urok

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setText("Updated New Text");
int position = editText.getText().length();
Editable editObj= editText.getText();
Selection.setSelection(editObj, position);
 1
Author: sujith s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 13:50:28

Jeśli chcesz ustawić kursor po znaku n z od prawej do lewej musisz zrobić to w ten sposób.

edittext.setSelection(edittext.length()-n);

If EditText ' s text like

version<sub></sub>

I chcesz przesunąć kursor na 6. pozycji z prawej

Następnie przesunie kursor na-

    version<sub> </sub>
                ^
 1
Author: Abu Mohammad Rasel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 07:29:21

Ustaw kursor na wiersz i kolumnę

Możesz użyć poniższego kodu, aby uzyskać pozycję w edytorze, która odpowiada pewnemu wierszowi i kolumnie. Następnie można użyć editText.setSelection(getIndexFromPos(row, column)), aby ustawić pozycję kursora. Można wykonać następujące wywołania metody:

  • getIndexFromPos(x, y) Przejdź do kolumny y linii x
  • getIndexFromPos(x, -1) Przejdź do ostatniej kolumny linii x
  • getIndexFromPos(-1, y) Przejdź do kolumny y ostatniego wiersza
  • getIndexFromPos(-1, -1) przejdź do ostatniej kolumny ostatniego linia

Wszystkie granice linii i kolumn są obsługiwane; wprowadzenie kolumny większej niż długość linii zwróci pozycję w ostatniej kolumnie linii. Wprowadzenie linii większej niż liczba linii EditText przejdzie do ostatniej linii. Powinien być wystarczająco niezawodny, ponieważ został mocno przetestowany.

static final String LINE_SEPARATOR = System.getProperty("line.separator");

int getIndexFromPos(int line, int column) {
    int lineCount = getTrueLineCount();
    if (line < 0) line = getLayout().getLineForOffset(getSelectionStart());  // No line, take current line
    if (line >= lineCount) line = lineCount - 1;  // Line out of bounds, take last line

    String content = getText().toString() + LINE_SEPARATOR;
    int currentLine = 0;
    for (int i = 0; i < content.length(); i++) {
        if (currentLine == line) {
            int lineLength = content.substring(i, content.length()).indexOf(LINE_SEPARATOR);
            if (column < 0 || column > lineLength) return i + lineLength;  // No column or column out of bounds, take last column
            else return i + column;
        }
        if (String.valueOf(content.charAt(i)).equals(LINE_SEPARATOR)) currentLine++;
    }
    return -1;  // Should not happen
}

// Fast alternative to StringUtils.countMatches(getText().toString(), LINE_SEPARATOR) + 1
public int getTrueLineCount() {
    int count;
    String text = getText().toString();
    StringReader sr = new StringReader(text);
    LineNumberReader lnr = new LineNumberReader(sr);
    try {
        lnr.skip(Long.MAX_VALUE);
        count = lnr.getLineNumber() + 1;
    } catch (IOException e) {
        count = 0;  // Should not happen
    }
    sr.close();
    return count;
}

Pytanie było już odpowiedział, ale pomyślałem, że ktoś może chcieć to zrobić zamiast.

Działa poprzez zapętlenie każdego znaku, zwiększając liczbę linii za każdym razem, gdy znajdzie separator linii. Gdy liczba wierszy jest równa żądanej linii, zwraca bieżący indeks + kolumnę lub indeks końca linii, jeśli kolumna jest poza granicami. Można również użyć ponownie metody getTrueLineCount(), która zwraca liczbę linii ignorując zawijanie tekstu, w przeciwieństwie do metody TextView.getLineCount().

 0
Author: Nicolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-23 02:03:18
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
 0
Author: Satendra Behre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 10:11:56

W kotlinie możesz utworzyć funkcję rozszerzenia w następujący sposób:

fun EditText.placeCursorAtLast() {
    val string = this.text.toString()
    this.setSelection(string.length)
}

A następnie po prostu zadzwoń myEditText.placeCursorAtLast()

 -1
Author: notdrone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 05:39:54

Uważam, że najprostszym sposobem na to jest użycie padding.

Powiedz w sekcji edittext xml, dodaj android: paddingLeft="100dp" Spowoduje to przesunięcie pozycji początkowej kursora 100dp w prawo od lewego końca.

W ten sam sposób można użyć android: paddingRight="100dp" Spowoduje to przesunięcie pozycji końcowej kursora 100dp w lewo od prawego końca.

Aby uzyskać więcej szczegółów, sprawdź ten artykuł na moim blogu: Android: ustawianie pozycji początkowej i końcowej kursora w EditText Widget

 -2
Author: Arthur Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-11 17:51:35