4

TableLayout在布局中添加了一个动态视图。每当布局有一个EditText光标时,它是不可见的,但它的光标在which isEditText的顶部是可见的。EditTextTextView

我添加了onClick事件、XML 文件EdittextTextview主要布局的 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>

TextViewXML 文件:

<?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"
     />

EditTextXML 文件:

<?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

4

6 回答 6

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;
                }
            });

并尝试将可见性设置为edittext

    edittext .setCursorVisible(true);
于 2013-09-06T07:45:36.063 回答
3

我得到了这个解决方案对我有用。

textView.setText("text");
textView.post(new Runnable() {
         @Override
         public void run() {
             textView.setSelection(textView.getText().toString().length());
         }
});
于 2013-09-06T07:35:39.627 回答
1

尝试在 onTouchListener 中调用 setTextIsSelectable

 editText.setOnTouchListener(new OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {
                editText.setTextIsSelectable(true);
                return false;
            }
        });
于 2015-04-27T05:55:49.753 回答
1

删除这一行:

textView.setCursorVisible(true); 

然后它工作。

于 2013-09-06T07:18:25.003 回答
0

尝试在您的编辑文本中添加 < requestFocus />。也许它有效。

于 2013-09-06T06:39:42.563 回答
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);
}
于 2017-06-20T11:19:30.017 回答