动态添加视图时,EditText中不显示光标

时间:2013-09-06 06:35:15

标签: android android-layout android-linearlayout android-tablelayout

我有一个TableLayout,并在布局中添加了动态视图。每当布局有EditText光标在EditText上不可见,但光标显示在EditText TextView的顶部。

我添加了onClick事件,EdittextTextview的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上。

6 个答案:

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