我有一个TableLayout
,并在布局中添加了动态视图。每当布局有EditText
光标在EditText
上不可见,但光标显示在EditText
TextView
的顶部。
我添加了onClick
事件,Edittext
和Textview
的XML文件以及主要布局的XML文件。
我的textview
听众:
textView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
textView.setSelection(textView.getText().toString().length());
textView.requestFocus();
textView.requestFocusFromTouch();
textView.setCursorVisible(true);
return false;
}
});
XML文件:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:scrollbars="vertical" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:focusable="true"
android:focusableInTouchMode="false"
android:text="@string/title_form_details"
android:textSize="25dp" />
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fieldsContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
android:shrinkColumns="1"
android:stretchColumns="1" >
</TableLayout>
</LinearLayout>
</ScrollView>
TextView
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:paddingBottom="0dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
/>
EditText
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/control"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:textColor="#000000"
android:textCursorDrawable="@null"
/>
动态地我正在添加TextView
,在下一行中我添加了Edittext
视图,但每当我点击EditText
时,光标都会显示在TextView
上。
答案 0 :(得分:4)
您将光标的可见性设置为textview ,因此TextView中的可见
从您的代码中删除这一行
textView.setCursorVisible(true);
textView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
textView.setSelection(textView.getText().toString().length());
textView.requestFocus();
textView.requestFocusFromTouch();
//textView.setCursorVisible(true);
return false;
}
});
并尝试将visiblity设置为 edittext
edittext .setCursorVisible(true);
答案 1 :(得分:3)
我让这个解决方案适合我。
textView.setText("text");
textView.post(new Runnable() {
@Override
public void run() {
textView.setSelection(textView.getText().toString().length());
}
});
答案 2 :(得分:1)
删除此行:
textView.setCursorVisible(true);
然后它有效。
答案 3 :(得分:1)
尝试在onTouchListener
中调用setTextIsSelectable editText.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
editText.setTextIsSelectable(true);
return false;
}
});
答案 4 :(得分:0)
尝试添加&lt; requestFocus /&gt;在您的edittext中。也许它有效。
答案 5 :(得分:0)
这个错误是Android中最愚蠢的错误之一,我猜......
以下是我管理它的方式:
public void addEditText(LinearLayout linearLayout, final View view) {
final EditText editText = new EditText(getActivity());
linearLayout.addView(textView);
linearLayout.addView(editText);
Utils.runDelayed(new Callable() {
@Override
public Object call() throws Exception {
if (editText.getText() == null || editText.getText().toString().isEmpty()) {
editText.setText("");
editText.setSelection(editText.getText().toString().length());
editText.setCursorVisible(true);
editText.setTextIsSelectable(true);
editText.setInputType(InputType.TYPE_CLASS_TEXT);
}
return null;
}
}, 10);
editText.setTextAppearance(R.style.LargeEditText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) { }
});
}
帮助者:
/**
* Run delayed.
*
* @param callable the callable
* @param delay the delay
*/
public static void runDelayed(final Callable callable, long delay) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}
}
}, delay);
}