如何在显示键盘时只显示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>
谢谢, 固相线
答案 0 :(得分:1)
我尝试了多个选项,只有一个正常工作。 可能有一种更清洁的方法,但这对我有用:
<强>代码强>
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)何时被某些东西隐藏(比较实际高度与初始高度)布局),可能是键盘。
我使用this question找到了解决方案。
我希望这段代码可以帮助别人。
答案 1 :(得分:1)
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);
}
}
};
答案 2 :(得分:-3)
添加
android:cursorVisible="false"