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

如何在显示键盘时只显示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> 

谢谢,Solidus

Solutions Collecting From Web of "Android:仅在显示键盘时在edittext中显示光标"

1)在您的EditText下的xml中设置:

 android:cursorVisible="false" 

2)设置onClickListener:

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

我尝试了多个选项,只有一个工作正常。 可能有一个更干净的方式来做到这一点,但这对我工作:

 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来检测activityRootactivityRoot的根布局的id)何时被隐藏(比较实际的高度和布局的初始高度),可能是键盘。

我发现使用这个问题的解决scheme。

我希望这个代码能帮助别人。

 android:cursorVisible="false" 

在Edittext中