Ich versuche ein EditText-Feld zu definieren, ohne dass die Soft-Tastatur automatisch angezeigt wird, wenn die Box berührt wird. Ich muss auch den blinkenden Cursor anzeigen lassen und basierend auf Berührung verschieben. Dies ist vor Android 4.0 einfach zu tun, indem Sie nur mText.setInputType (InputType.TYPE_NULL) verwenden. Dies ist die einzige Möglichkeit, die automatische Soft-Tastatur-Anzeige zu unterdrücken, aber in Android 4.0 unterdrückt sie auch den blinkenden Cursor. Der Cursor positioniert sich jedoch richtig und mText.getSelectionStart() gibt den letzten Touch-Speicherort zurück. Wenn ich zum Beispiel in einem EditText-Feld, das "123" enthält, zwischen "2" und "3" berühre, gibt mText.getSelectionStart() korrekt eine 2 zurück, obwohl kein Cursor angezeigt wird. Gibt es eine Möglichkeit, einen Cursor an dieser Stelle programmgesteuert anzuzeigen? HierAndroid 4.0 EditText ohne Softkeyboard und mit Cursor-Positionierung
ist der Code, den ich EditText Cursor-Positionen zu testen, bin mit:
public class TestCodeActivity extends Activity implements OnClickListener {
private EditText mText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getApplicationContext();
setContentView(R.layout.test);
findViewById(R.id.Button01).setOnClickListener(this);
findViewById(R.id.Button02).setOnClickListener(this);
findViewById(R.id.Button03).setOnClickListener(this);
findViewById(R.id.Button04).setOnClickListener(this);
mText = (EditText) findViewById(R.id.editText1);
mText.setInputType(InputType.TYPE_NULL);
}
@Override
public void onClick(View v) {
if (v.getTag().equals("Clear")) {
mText.setText("");
} else {
String buttontag = v.getTag().toString();
String str = mText.getText().toString();
int cursor = mText.getSelectionStart();
if(cursor==str.length())
str = str + buttontag;
else
str = str.substring(0, cursor) + buttontag + str.substring(cursor, str.length());
mText.setText(str);
mText.setSelection(cursor+1);
// ---> need code to display blinking cursor at cursor+1 location ???
}
}
}
Hier ist das Layout xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="85dp" >
<EditText
android:id="@+id/editText1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.13"
android:ems="10"
android:textSize="25sp" >
<requestFocus />
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/Button01"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="1"
android:tag="1"
android:layout_gravity="center"
android:textSize="30sp" />
<Button
android:id="@+id/Button02"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="2"
android:tag="2"
android:layout_gravity="center"
android:textSize="30sp" />
<Button
android:id="@+id/Button03"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="3"
android:tag="3"
android:layout_gravity="center"
android:textSize="30sp" />
<Button
android:id="@+id/Button04"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="Clear"
android:tag="Clear"
android:layout_gravity="center"
android:textSize="30sp" />
</LinearLayout>
</LinearLayout>
Sie meinen Tag mit dieser Lösung gespart! +1 –
Diese Lösung funktioniert nicht für mehrzeiligen Text bearbeiten. Können Sie bitte für mehrzeilige Text bearbeiten? – user1213202
@ user1213202: Bitte konzentrieren Sie sich auf 'int offset = layout.getOffsetForHorizontal (0, x);', der erste Parameter der Methode Layout.getOffsetForHorizontal (int line, float horiz) ist der Zeilenindex in Ihrem Editiertext für mehrzeiligen Editiertext , müssen Sie den Zeilenindex bestimmen, auf den Sie den Cursor bewegen wollen, und ihn dann in 'getOffsetForHorizontal' übergeben. – nautilusvn