Как установить фоны для каждой клавиши на клавиатуре Android. KeyboardView android: keyBackground предоставляет один фон для всех ключей. Но я хочу установить разные фоны для каждого ключа.Android-клавиатура. Фон ключа
ответ
Если вы пишете свой собственный IME, попробуйте использовать чертеж FOREground (с андроидом: keyIcon в XML или Key.icon в Java), который равен размеру всего ключа. Это по существу эквивалентно установке фонового изображения одного ключа. Конечно, вам также придется включить передний план в свой образ.
Вам также придется использовать фоновое изображение без прокладки, чтобы оно не заглядывало по краям. Смотрите объявление для подробной информации о том, как это сделать: how does a 9patch png work in android apps
Барри
любой образец кода для этого? – usman
Возможно, вы сможете определить новый Input Method.
Я тоже пытался это сделать. Основной фон рисуется в onBufferDraw() в классе KeyboardView. Проблема в том, что это частный метод, поэтому вы не можете переопределить его подклассом. Поэтому я попытался полностью копировать KeyboardView и модифицировать его, но он использует ресурсы com.android.internal.R
, к которым у внешнего приложения нет доступа. Так что этот подход не работает.
На данный момент это начинает выглядеть так, как будто я должен выкинуть классы клавиатуры Android из окна и написать все это с нуля - all b/c. Я не могу изменить фоновое изображение пробела. Смешной.
Начиная с нуля это не так сложно. Фактически вы можете просто скопировать/вставить KeyboardView.java из открытого источника в новый подкласс KeyboardView и начать настраивать его в соответствии с вашими потребностями. –
Многие классы в Android - это то, что невозможно настроить. Это было бы намного проще, если бы в архитектуре Android использовались делегаты (или слушатели) и разрешали замену вспомогательных классов в большем количестве очков. – Huperniketes
Я предлагаю копировать/вставлять KeyboardView.java в свой собственный класс клавиатуры. Таким образом, вы получаете всю функциональность, предварительно написанную, и вы можете переопределить все, что вам нужно. Вот что я сделал. –
Я обычай MyKeyBoradView продлить KeyBoardView и переопределить метод 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);
}
}
}
Реализация эффект заключается в следующем
Это ссылки: https://github.com/xuejinwei/NumberKeyboard
- 1. Динамический фон Android изменения ключа
- 2. Как сменить ключевой фон любого ключа в мягкой клавиатуре Android
- 3. Как я могу закрыть фон ключа в gnuplot?
- 4. Css фон/фон положение проблема
- 5. Пользовательский фон клавиатуры Android
- 6. сделать фон размытым и отключить фон
- 7. Весь фон Фон на некоторой части страницы
- 8. Меняет ли фон фон и добавляет LinearLayout?
- 9. фон нормальный и фон активен в CSS
- 10. Пользовательский фон/прозрачный фон на UIBarButtonItem?
- 11. Как установить фон emacsclient как фон Emacs?
- 12. Python Tkinter фон текста
- 13. java.lang.OutOfMemoryError фон
- 14. фон Shorthand
- 15. Фон кнопки
- 16. Анимированный фон
- 17. Двойной фон
- 18. Мозаика - Фон
- 19. вида фон
- 20. Прозрачный фон
- 21. Фон формы
- 22. Repeat фон
- 23. Shaped фон
- 24. модифицирующий фон
- 25. Draw Фон
- 26. Фон HoverTool
- 27. Тематический фон
- 28. мигающий фон
- 29. Фон плитки
- 30. значение ключа ключа python
Вы имели какой-либо SucceS с пользовательскими настройками keybackgrounds для одной клавиши на клавиатуре? – Wouter