Android: sólo muestra el cursor en edittext cuando se muestra el teclado

¿Cómo puedo mostrar sólo el cursor de un EditText cuando se muestra el teclado. En el momento en que el cursor está parpadeando incluso si el EditText no está activo y el teclado está oculto, lo que es realmente molesto.

Así es como se ve mi diseño:

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

Gracias, Solidus

1) Establecer en su xml en su 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); } } }; 

He intentado varias opciones y sólo una está funcionando correctamente. Puede que haya una manera más limpia de hacerlo, pero esto funcionó para mí:

Código

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

Detalles

La idea es usar un ViewTreeObserver para detectar cuando el activityRoot (id del diseño raíz de su actividad) está oculto por algo (comparando la altura real con la altura inicial del diseño), probablemente el teclado.

Encontré la solución usando esta pregunta .

Espero que este código ayude a alguien.

añadir

 android:cursorVisible="false" 

En Edittext

  • Android: ¿Cómo Requerir un Cursor para actualizar ListView después de eliminar la fila de la base de datos?
  • Android.database.CursorWindowAllocationException: La asignación de ventana de cursor de 2048 kb falló incluso después de cerrar el cursor
  • ¿Cómo puedo recuperar datos de la base de datos con el cursor? (Android, SQLite)
  • Conexiones de la base de datos Android y cursores oh my
  • ListView con CustomCursorAdapter desplazamiento no es suave
  • ¿Por qué este cursor está vacío?
  • Java.lang.IllegalStateException: intenta volver a abrir un objeto ya cerrado: android.database.sqlite.SQLiteQuery
  • SQLite de Android - Cursor y ContentValues
  • Cursor de Android con ORMLite para usar en CursorAdapter
  • La aplicación no cerró el cursor o el objeto de base de datos que se abrió aquí:
  • Establecer la posición del cursor de edición de texto en función de la posición de toque del usuario Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.