Android:仅在键盘显示时在EditText中显示光标

10

当键盘显示时,如何只显示EditText的光标?

目前,即使EditText未激活且键盘已隐藏,光标仍在闪烁,这真的很让人恼火。

这是我的布局外观:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >

    <ImageButton
        android:id="@+id/activity_main_add_button"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/button"
        android:contentDescription="@string/desc_add"
        android:onClick="addGame"
        android:src="@android:drawable/ic_input_add"
        android:tint="@color/gray" />

    <View
        android:id="@+id/stub1"
        android:layout_width="2dp"
        android:layout_height="40dp"
        android:layout_toRightOf="@id/activity_main_add_button"
        android:background="@color/light_gray" />

    <ImageButton
        android:id="@+id/activity_main_menu_button"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_toRightOf="@id/stub1"
        android:background="@drawable/button"
        android:contentDescription="@string/desc_add"
        android:onClick="showMenu"
        android:scaleType="fitXY"
        android:src="@drawable/square_button"
        android:tint="@color/gray" />

    <View
        android:id="@+id/stub2"
        android:layout_width="2dp"
        android:layout_height="40dp"
        android:layout_toRightOf="@id/menu_button"
        android:background="@color/light_gray" />

    <EditText
        android:id="@+id/activity_main_search"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_toRightOf="@id/stub2"
        android:background="@drawable/default_background"
        android:gravity="center"
        android:hint="@string/search_game"
        android:inputType="text"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/activity_main_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/activity_main_add_button"
        android:layout_margin="10dp"
        android:divider="@color/white"
        android:dividerHeight="10dp" >
    </ListView>

</RelativeLayout>

谢谢


可能是从editText中删除光标的重复问题。 - codeMagic
3个回答

4
  1. Set in your xml under your EditText:

    android:cursorVisible="false"
    
  2. Set onClickListener:

    iEditText.setOnClickListener(editTextClickListener);
    
    OnClickListener editTextClickListener = new OnClickListener() 
    
    {
    
        public void onClick(View v) 
        {
             if (v.getId() == iEditText.getId()) 
            {
                iEditText.setCursorVisible(true);
            }
    
        }
    };
    

3
键盘关闭后光标仍然活动,出现了无法正常工作的情况。 - tadvas

3

我尝试了多种选项,只有一种是正确的。 可能有更简洁的方法来完成它,但这对我有效:

代码

public class MainActivity extends Activity {
    EditText edit = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.edit);

        final View activityRootView = findViewById(R.id.activityRoot);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                activityRootView.getWindowVisibleDisplayFrame(r);
                int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
                if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    if (edit != null) {
                        edit.setCursorVisible(true);
                    }
                } else {
                    if (edit != null) {
                        edit.setCursorVisible(false);
                    }
                }
             }
        });
    }
}

细节

这个想法是使用ViewTreeObserver来检测activityRoot(您的活动根布局的ID)何时被某些东西隐藏(通过比较实际高度和布局的初始高度),可能是键盘。

我在这个问题中找到了解决方案。

我希望这段代码能帮助有需要的人。


-4

添加

android:cursorVisible="false" 

在EditText中


请添加评论说明为什么您认为原文无用。 - Rahul
2
将cursorVisible设置为false将始终隐藏光标,即使EditText具有焦点。相反,我们希望在有焦点时显示光标,但在没有焦点时隐藏。 - pietrorea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接