Làm cách nào tôi có thể đặt hình nền cho mỗi phím trên bàn phím Android. Bàn phím Xem android: keyBackground cung cấp một nền cho tất cả các phím. Nhưng tôi muốn đặt nền tảng khác nhau cho mỗi phím.Bàn phím Android. Phím nền
Trả lời
Nếu bạn đang viết IME của riêng mình, hãy thử sử dụng một hình vẽ cho hình ảnh FOREground (với android: keyIcon trong XML hoặc Key.icon trong Java) bằng với kích thước của toàn bộ khóa. Điều này về cơ bản là tương đương với thiết lập hình nền của một phím duy nhất. Tất nhiên bạn cũng sẽ phải bao gồm tiền cảnh trong hình ảnh của bạn.
Bạn cũng sẽ phải sử dụng hình nền không có đệm, vì vậy nó không liếc xung quanh các cạnh. Xem gửi bài này để biết chi tiết về làm thế nào để làm điều này: how does a 9patch png work in android apps
Barry
bất kỳ mã mẫu nào cho điều này? – usman
Có lẽ bạn có thể xác định Input Method mới.
Tôi cũng đang cố thực hiện điều này. Nền chính được vẽ trong onBufferDraw() trong lớp KeyboardView. Vấn đề là nó là một phương pháp riêng, vì vậy bạn không thể ghi đè nó với một lớp con. Vì vậy, tôi đã thử sao chép KeyboardView hoàn toàn và sửa đổi, nhưng nó sử dụng tài nguyên com.android.internal.R
, mà một ứng dụng bên ngoài không có quyền truy cập. Cách tiếp cận đó không hiệu quả.
Tại thời điểm này, nó bắt đầu trông giống như tôi phải ném các lớp bàn phím của Android ra ngoài cửa sổ và viết toàn bộ từ đầu - tất cả b/c Tôi không thể thay đổi hình nền của phím cách. Nực cười.
Bắt đầu từ đầu không phải là khó khăn. Trong thực tế, bạn chỉ có thể sao chép/dán KeyboardView.java từ nguồn mở vào một lớp con mới của KeyboardView và bắt đầu tùy chỉnh nó cho phù hợp với mục đích của bạn. –
Nhiều lớp trong Android không thể tùy chỉnh. Sẽ dễ dàng hơn nếu hoàn thành kiến trúc của Android khi sử dụng các đại biểu (hoặc người nghe) và cho phép thay thế các lớp trợ giúp tại nhiều điểm hơn. – Huperniketes
Tôi đề nghị sao chép/dán KeyboardView.java vào lớp xem bàn phím tùy chỉnh của riêng bạn. Bằng cách đó bạn sẽ có được tất cả các chức năng được viết sẵn và bạn có thể ghi đè lên bất cứ điều gì bạn cần. Đó là những gì tôi đã làm. –
tôi tùy chỉnh MyKeyBoradView mở rộng KeyBoardView và ghi đè lên các phương pháp 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);
}
}
}
liên kết này: https://github.com/xuejinwei/NumberKeyboard
- 1. Làm thế nào để thay đổi màu nền của bàn phím cho bàn phím mềm Android?
- 2. Android - Nhận bấm phím trên bàn phím
- 3. Android - phím và bàn phím tùy chỉnh
- 4. Nguồn bàn phím Android
- 5. Bàn phím tắt Android
- 6. Nhận Bàn phím Vị trí Con trỏ Bàn phím Android
- 7. cách thay đổi nền chính của bất kỳ phím nào trong bàn phím ảo Android
- 8. Tắt Android Nhập phím bằng bàn phím mềm
- 9. Ẩn bản xem trước phím trên bàn phím Android
- 10. Mã phím cho Android thu nhỏ nút bàn phím ảo
- 11. Kích hoạt sự kiện nhấn phím bàn phím mà không cần nhấn phím từ bàn phím
- 12. Cách ẩn bàn phím khi nhập phím
- 13. Bàn phím mạng Emacs
- 14. ẩn bàn phím ios
- 15. Cách bật lên bàn phím Android "? 123"
- 16. Bàn phím mềm Android không hoạt động
- 17. Mở rộng bàn phím ảo Android
- 18. lực lượng bàn phím mở trên android
- 19. Ẩn nút micrô Bàn phím ảo Android
- 20. Bàn phím shortcurts cho Android Emulator?
- 21. Ngôn ngữ bố cục bàn phím Android
- 22. Android PhoneGap - bàn phím số chỉ
- 23. Đặt Chế độ bàn phím trong bàn phím tùy chỉnh Android
- 24. Tắt bàn phím <enter> phím
- 25. Mở bàn phím mềm khi nhấn phím
- 26. Các biểu tượng phím trên bàn phím
- 27. Bàn phím đa nền tảng/đầu vào chuột khuyến nghị
- 28. Bàn phím số iPad
- 29. Bàn phím chéo keylogger
- 30. Bàn phím UITextViewDismissMode Bug
Bạn có bất kỳ succes với các thiết lập tùy chỉnh keybackgrounds cho một chìa khóa duy nhất trên bàn phím? – Wouter