¿Cómo puedo configurar fondos para cada tecla en el teclado de Android? KeyboardView android: keyBackground proporciona un fondo para todas las teclas. Pero quiero establecer diferentes fondos para cada clave.teclado Android. Fondo de la clave
Respuesta
Si está escribiendo su propio IME, intente utilizar un drawable para la imagen FOREground (con android: keyIcon en XML o Key.icon en Java) que sea igual al tamaño de la clave completa. Esto es esencialmente equivalente a establecer la imagen de fondo de una sola tecla. Por supuesto, también deberá incluir el primer plano en su imagen.
También tendrá que usar una imagen de fondo sin relleno, para que no se asome por los bordes. Ver esta publicación para más detalles sobre cómo hacer esto: how does a 9patch png work in android apps
Barry
cualquier código de muestra para esto? – usman
Quizás podría definir un nuevo Input Method.
He estado tratando de hacer esto también. El fondo de la clave se dibuja enBufferDraw() en la clase KeyboardView. El problema es que es un método privado, por lo que no puede anularlo con una subclase. Así que intenté copiar KeyboardView por completo y modificar eso, pero usa los recursos com.android.internal.R
, a los que una aplicación externa no tiene acceso. Entonces ese enfoque no funciona.
En este momento está empezando a parecer que tengo que lanzar las clases de teclado de Android por la ventana y escribir todo desde cero --todo b/c No puedo cambiar la imagen de fondo de la tecla de espacio. Ridículo.
Empezar de cero no es tan difícil. De hecho, puede simplemente copiar/pegar KeyboardView.java desde el código abierto en una nueva subclase de KeyboardView, y comenzar a personalizarlo para adaptarlo a sus propósitos. –
Muchas clases en Android son imposibles de personalizar. Sería mucho más fácil de lograr si la arquitectura de Android utilizara delegados (u oyentes) y permitiera el reemplazo de clases de ayuda en más puntos. – Huperniketes
Sugiero copiar/pegar KeyboardView.java en su propia clase de vista de teclado personalizada. De esta forma, obtienes toda la funcionalidad previamente escrita y puedes anular todo lo que necesites. Eso fue lo que hice. –
me encargo MyKeyBoradView extender el KeyBoardView y reemplazar el método onDraw.
public class MyKeyBoardView extends KeyboardView {
private Context mContext;
private Keyboard mKeyBoard;
public MyKeyBoardView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
}
public MyKeyBoardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mContext = context;
}
/**
* ov
*/
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
mKeyBoard = this.getKeyboard();
List<Key> keys = null;
if (mKeyBoard != null) {
keys = mKeyBoard.getKeys();
}
if (keys != null) {
for (Key key : keys) {
// TODO: 16/8/23 different key set the different background
if (key.codes[0] == -4) {
drawKeyBackground(R.drawable.bg_keyboardview_yes, canvas, key);
drawText(canvas, key);
}
}
}
}
private void drawKeyBackground(int drawableId, Canvas canvas, Key key) {
Drawable npd = mContext.getResources().getDrawable(
drawableId);
int[] drawableState = key.getCurrentDrawableState();
if (key.codes[0] != 0) {
npd.setState(drawableState);
}
npd.setBounds(key.x, key.y, key.x + key.width, key.y
+ key.height);
npd.draw(canvas);
}
private void drawText(Canvas canvas, Key key) {
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextAlign(Paint.Align.CENTER);
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
if (key.label != null) {
String label = key.label.toString();
Field field;
if (label.length() > 1 && key.codes.length < 2) {
int labelTextSize = 0;
try {
field = KeyboardView.class.getDeclaredField("mLabelTextSize");
field.setAccessible(true);
labelTextSize = (int) field.get(this);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
paint.setTextSize(labelTextSize);
paint.setTypeface(Typeface.DEFAULT_BOLD);
} else {
int keyTextSize = 0;
try {
field = KeyboardView.class.getDeclaredField("mLabelTextSize");
field.setAccessible(true);
keyTextSize = (int) field.get(this);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
paint.setTextSize(keyTextSize);
paint.setTypeface(Typeface.DEFAULT);
}
paint.getTextBounds(key.label.toString(), 0, key.label.toString()
.length(), bounds);
canvas.drawText(key.label.toString(), key.x + (key.width/2),
(key.y + key.height/2) + bounds.height()/2, paint);
} else if (key.icon != null) {
key.icon.setBounds(key.x + (key.width - key.icon.getIntrinsicWidth())/2, key.y + (key.height - key.icon.getIntrinsicHeight())/2,
key.x + (key.width - key.icon.getIntrinsicWidth())/2 + key.icon.getIntrinsicWidth(), key.y + (key.height - key.icon.getIntrinsicHeight())/2 + key.icon.getIntrinsicHeight());
key.icon.draw(canvas);
}
}
}
El efecto realización es el siguiente
Esta enlaces: https://github.com/xuejinwei/NumberKeyboard
- 1. Cómo poner el fondo de teclado en Android
- 2. Código clave para Android minimice el botón del teclado virtual
- 3. Android - Obtener la tecla del teclado presione
- 4. El teclado del software cambia el tamaño de la imagen de fondo en Android
- 5. Fuente de teclado Android
- 6. Android desactivar la tecla Enter en el teclado de software
- 7. Leer eventos de teclado en Android WebView
- 8. Android fondo de la imagen de repetición
- 9. Teclado Android api
- 10. Android cerrar el teclado
- 11. Android. Evite la ampliación de fondo
- 12. Desactivar el teclado <enter> clave
- 13. Android: Detectar inactividad del usuario/Detectar (teclado) entrada de teclado
- 14. Cómo mantener el tamaño de la imagen de fondo cuando se muestra el teclado del software
- 15. Permiso denegado (clave pública, teclado interactivo)
- 16. ¿Cómo establecer un fondo diferente para la tecla de función en xml en el teclado?
- 17. OSX aplicación de fondo atajo de teclado, cómo
- 18. Fondo de forma de Android
- 19. Tipo de entrada/clave personalizada para el teclado suave de Android
- 20. ¿Cómo cambiar la fuente de la tecla del teclado Android?
- 21. Android - ¿Detecta el teclado visible?
- 22. Android: teclado personalizado y acción
- 23. Android WebView color de fondo
- 24. Añadir fondo a la escena Andengine Android
- 25. Idioma de diseño de teclado de Android
- 26. Fondo de pantalla/dimensiones de fondo de Android
- 27. ¿Cómo cambiar el color de fondo del teclado en iOS?
- 28. Android PhoneGap - Teclado numérico solamente
- 29. botón selector de fondo Android
- 30. Aclaración sobre la clave pública de Android?
¿Ha tenido algún éxito con los ajustes keybackgrounds personalizado para una sola tecla en el teclado? – Wouter