Dưới đây là một số mã hoạt động để thực hiện những gì bạn muốn.
Nó khá đơn giản:
Để thiết lập vị trí con trỏ đến cuối dòng đầu tiên, đầu tiên chúng ta phải có được các chỉ số của nhân vật văn bản cuối cùng của dòng đó. Có một phương pháp trên Giao diện EditTexts để thực hiện việc này.
Các Layout là những gì EditText sử dụng trong nội bộ để bố trí các văn bản, và nó có một phương pháp gọi là getLineEnd mà trả về chỉ mục văn bản ở phần cuối của một dòng (chúng ta cần phải trừ đi 1 từ này, nếu không chúng tôi con trỏ sẽ kết thúc ở đầu dòng tiếp theo).
Khi chúng tôi có vị trí đặt con trỏ, chúng tôi chỉ sử dụng phương thức setSelection của EditText.
int endOfFirstLine = editText.getLayout().getLineEnd(0)-1;
//set the text selection (cursor postion) to that index
editText.setSelection(endOfFirstLine);
Chúng tôi cũng có thể nhận được số dòng thực sự dễ dàng với
int lineCount = editText.getLineCount();
Thách thức đối với mã này, là nó phải được chạy sau khi Layout của EditText đã được xây dựng. Điều đó có nghĩa rằng nếu chúng ta chỉ cần đặt điều này trong onCreate hoặc onResume, nó sẽ không hoạt động. Số lượng dòng sẽ là 0.
Vì vậy, chúng tôi phải chạy mã này sau khi vượt qua bố cục đã được hoàn thành. Mà chúng ta làm bằng cách thêm một trình lắng nghe bố cục vào văn bản, và chạy mã sau khi nó hoàn thành.
editText.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
}
Heres mã hoạt động đầy đủ:
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();
}
}
thats great, thực sự tôi hiểu rằng bạn đã cố gắng để xem xét các dòng tự động gói, không phải là dòng kết thúc với '\ n' hoặc '\ r', đó là ngắt dòng thực sự do người dùng nhập. Dù sao, vui vì bạn đã có một giải pháp! –