Poniżej znajduje się kilka działającego kodu, aby zrobić to, co chcesz.
To bardzo proste:
Aby ustawić położenie kursora do końca pierwszej linii, musimy najpierw uzyskać indeks ostatniego znaku tekstu tej linii. W tym celu jest metoda na EditTexts 'Layout.
Układ jest co EditText używa wewnętrznie do układu tekstu, a to ma metodę zwaną getLineEnd która zwraca indeks tekstu na końcu wiersza (musimy odjąć 1 od tego, w przeciwnym razie Our kursor kończyłby się na początku następnego wiersza).
Po ustawieniu kursora na, używamy metody edycji EditText.
int endOfFirstLine = editText.getLayout().getLineEnd(0)-1;
//set the text selection (cursor postion) to that index
editText.setSelection(endOfFirstLine);
Możemy również uzyskać liczbę wierszy naprawdę łatwo
int lineCount = editText.getLineCount();
Sztuczka z tego kodu, jest to, że musi być prowadzony po UKŁAD EditText został zbudowany. Oznacza to, że jeśli umieścimy to w naszym onCreate lub onResume, to nie zadziała. Liczba linii wynosiłaby 0.
Musimy więc uruchomić ten kod po zakończeniu przejścia układu. Co robimy, dodając detektor układu do edittext i uruchamiając kod po jego zakończeniu.
editText.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
}
Herezje pełny kod działalność:
public class MainActivity extends Activity {
private EditText editText;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.test_edittext);
editText.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
//this gives us the index of the text at the end of the first line.
int endOfFirstLine = editText.getLayout().getLineEnd(0)-1;
//set the text selection (cursor postion) to that index
editText.setSelection(endOfFirstLine);
//we can get the line count with getLineCount
int lineCount = editText.getLineCount();
Toast.makeText(MainActivity.this, "number of edittext lines: " + lineCount, Toast.LENGTH_LONG).show();
}
});
}
@Override protected void onResume() {
super.onResume();
}
}
To świetnie, właściwie zrozumiałem, że próbowaliście rozważyć automatycznie zawijane linie, a nie linie zakończone "\ n" lub "\ r", które są rzeczywistymi przerwami wprowadzonymi przez użytkownika. W każdym razie, cieszę się, że masz rozwiązanie! –