2009-10-08 9 views
24

Lo que quiero hacer es cambiar la etiqueta predeterminada "Listo" que aparece en el teclado virtual. Esto es lo que he intentado sin suerte:Android: No se puede saber cómo usar setImeActionLabel

mSearchInput.setImeOptions(EditorInfo.IME_ACTION_DONE); 
mSearchInput.setImeActionLabel(getString(R.string.search_action_label), EditorInfo.IME_ACTION_DONE); 

I am capaz, sin embargo, para manejar un clic en ese botón, con esto:

mSearchInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      performSearch(); 
      return true; 
     } 
     return false; 
    } 
}); 

no tengo ni idea de cómo Puedo cambiar la etiqueta en ese botón en este momento.

Respuesta

25

imeActionLabel establece la etiqueta del botón que aparece en la parte superior derecha en el modo IME de pantalla completa (es decir, cuando el teléfono está en horizontal). Si desea cambiar el botón en la parte inferior derecha del teclado, puede pasar ciertos indicadores al imeOptions.

Por lo que sé, para ese botón está limitado a un determinado conjunto de acciones (consulte here para obtener una lista completa de las marcas admitidas), pero como parece que quiere un botón de búsqueda, todo lo que tiene que hacer es ajustar ligeramente su primera línea y utilizar IME_ACTION_SEARCH:

mSearchInput.setImeOptions(EditorInfo.IME_ACTION_SEARCH); 

eso sí, el aspecto exacto de ese botón dependerá del método de entrada. El teclado predeterminado de Android muestra una lupa para el indicador de búsqueda, mientras que la entrada táctil (teclado de HTC) parece completamente ajena a esa bandera, y sigue mostrando un botón de retorno.

+0

Eso es curioso. Cuando cambio al paisaje en el emulador, el teclado virtual ya no aparece. Además, noté que la aplicación de mensajería, por ejemplo, pone un emoticono (":-)") en lugar del botón "Listo". ¿Utiliza un diseño de teclado personalizado, o qué? Gracias por el consejo, por cierto. – Felix

+3

El teclado virtual no aparece porque el emulador simula que un teclado físico está expuesto en modo horizontal (igual que el teclado virtual no aparecerá en un G1 si lo abre). Puede desactivar el teclado modificando el archivo config.ini para el AVD, agregando 'hw.keyboard = no'. En cuanto a la aplicación Messaging, acabo de verificar su fuente, y supongo que el emoticono es un subproducto de 'inputType =" textShortMessage "' y la falta de un botón "Enviar" se debe a 'imeOptions =" flagNoEnterAction "', pero en realidad no lo he probado. Ten en cuenta que Touch Input parece ignorar ambas banderas. – mernen

+2

Desde el código en la pregunta original, puede contabilizar el botón "devolver" de un teclado físico si solo agrega este código "OR": if (actionId == EditorInfo.IME_ACTION_SEARCH || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) – CircuitBreaker716

Cuestiones relacionadas