以下は、あなたがしたいことをするための作業用コードです。
それは非常に簡単です:
最初の行の末尾にカーソル位置を設定するには、まずその行の最後のテキスト文字のインデックスを取得する必要があります。これを行うには、EditTextsのレイアウトにメソッドがあります。そうでない場合は
レイアウトはのEditTextがテキストをレイアウトするために内部で使用するものであり、それは、行の末尾にテキストインデックスを返しgetLineEndというメソッドを持っている(私たちはここから1を減算する必要があり、私たちのカーソルは次の行の先頭で終わります)。
カーソルを置く位置になったら、setSelectionのEditTextメソッドを使用します。
int endOfFirstLine = editText.getLayout().getLineEnd(0)-1;
//set the text selection (cursor postion) to that index
editText.setSelection(endOfFirstLine);
我々はまた、このコードで
int lineCount = editText.getLineCount();
で、本当に簡単なトリックを行数を取得することができ、それはのEditTextのレイアウトが構築された後に実行しなければならないことです。つまり、これをonCreateまたはonResumeに入れるだけでは機能しません。行数は0になります。
レイアウトパスが完了したら、このコードを実行する必要があります。 edittextにレイアウト・リスナーを追加し、その完了後にコードを実行します。
editText.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
}
相続人は完全なアクティビティコード:
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();
}
}
本当に私はあなたが自動的に折り返された行を考慮しようとしていたことを理解しました。 '\ n'または '\ r'で終わった行ではなく、実際に改行が入力されました。とにかく、あなたは解決策を得てうれしい! –