2013-07-18 46 views
12

Tôi muốn có một số phím trong bàn phím khác với phím khác.cách thay đổi nền chính của bất kỳ phím nào trong bàn phím ảo Android

Ví dụ như thay đổi, xóa, phím không gian ở bên dưới ảnh:

enter image description here

Theo các tài liệu tham khảo từ google. Chúng tôi có thể thay đổi nền của khóa bằng cách sử dụng "android:[email protected]/xxx" trong "input.xml", nhưng nó thay đổi nền của tất cả các phím trong bàn phím.

Mặc dù "android: keyicon" trong qwerty.xml có thể có một phím thay đổi, nhưng nó chỉ thay thế nhãn. Trong khi đó, sử dụng "android:keyicon", hình ảnh không thể che toàn bộ khóa, hình ảnh sẽ nhỏ hơn một chút so với nền chính.

Cách chính xác để thay đổi nền của một số phím là gì?

+0

Bạn có thể tham khảo link sau 1. [link 1] [1] 2. [link 2] [2] [1]: http: //stackoverflow.com/questions/15789997/how-to-change-background-color-of-key-for-android-soft-keyboard [2]: http://stackoverflow.com/questions/18180136/how -to-thay đổi-nền-màu-hoặc-chủ đề-của-phím-động-i n-custom-keyboard-a – ashishmohite

Trả lời

13

Không rõ liệu bạn có hiểu cách tạo bàn phím tùy chỉnh hay không. Trong trường hợp bạn không, here's một dự án nhỏ có thể tải xuống để tạo bàn phím số tùy chỉnh. Để lớp CustomKeyboardView ở đó hoặc đến lớp bàn phím tùy chỉnh của riêng bạn, hãy thêm phương thức sau đây. Nó ghi đè lên phương thức onDraw() và vẽ nền của khóa được xác định bằng mã 7 (trong trường hợp này là "0") màu đỏ và tất cả các phím màu xanh khác.

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) {    
     if (key.codes[0] == 7) { 
      Log.e("KEY", "Drawing key with code " + key.codes[0]); 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 

     } else { 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 
     }    
    } 
} 

tinted keys

Trong trường hợp này, tôi không sử dụng 9 miếng vá hình ảnh, nhưng chỉ khoảng 50% hình ảnh vuông trong suốt đơn giản và đạt được một hiệu ứng nơi các nút hiện có chỉ màu với các màu sắc tôi truy nã. Để có được kết quả tùy chỉnh hơn, tôi có thể tạo hình ảnh 9 miếng có thể vẽ và thực hiện các thao tác sau. Lưu ý rằng hai phím có biểu tượng không hiển thị chính xác vì chúng không được định nghĩa là hình ảnh 9 bản vá và tôi đã không thực hiện bất kỳ nỗ lực đặc biệt nào để làm cho chúng hoạt động tốt cho ví dụ này. Tôi cũng không giải quyết việc sử dụng các hình ảnh/hiệu ứng khác nhau cho các trạng thái khác nhau cho các phím; những người khác đã chỉ ra cách làm điều đó.

@Override 
public void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) { 
     if (key.codes[0] == 7) { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 

     } else { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 
     } 

     Paint paint = new Paint(); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(48); 
     paint.setColor(Color.GRAY); 

     if (key.label != null) { 
      canvas.drawText(key.label.toString(), key.x + (key.width/2), 
          key.y + (key.height/2), paint); 
     } else { 
      key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      key.icon.draw(canvas); 
     } 
    } 
}  

replaced keys

+0

Cảm ơn! ví dụ của bạn giúp tôi tìm lỗi khi đổi tên gói. Tôi cần xóa Java tạo và tạo lại nó. –

0

tôi không thể đăng coments, vì vậy tôi đặt một liên kết đến một câu hỏi tương tự tôi tìm thấy nơi có một giải pháp mà tôi nghĩ tốt của nó, làm nó theo mã:

Customize the appearance of a <Key>

+0

Bạn đang trỏ vào giải pháp vẽ văn bản trên Khóa. OP là về việc thay đổi nền tảng chính. –

6

Điều đầu tiên cần lưu ý là không có cách đơn giản để làm điều này trong XML, bạn sẽ cần phải làm điều đó trong Java.

Bạn có thể lấy danh sách các phím bằng cách sử dụng đoạn mã sau:

Keyboard keyboard = keyboardView.getKeyboard(); 
List<Key> keys = keyboard.getKeys(); 

Một khi bạn có danh sách các phím, bạn có thể lặp qua chúng để tìm những người bạn muốn thay đổi, sử dụng một cho vòng lặp như:

for (Key key : keys) { 
    ... 
} 

Please refer to the documentation here for the properties of Keyboard.Key in Android. Có thể bạn sẽ muốn sử dụng the codes để phân biệt các phím.

Bạn sẽ nhận thấy rằng không có cách trực tiếp nào để thay đổi màu nền của khóa. Tuy nhiên, có một cách để thay đổi biểu tượng, vì vậy bạn có thể sử dụng nó để mô phỏng hành vi tương tự. Bạn có thể tạo các đối tượng có thể vẽ có chứa màu bạn cần và đặt nó làm biểu tượng. Bạn có thể sử dụng một số NinePatchDrawable.

Bạn có thể thêm chức năng này theo phương thức onStartInputView() hoặc trong phương thức onDraw(). Bạn có thể thấy một đoạn mã được cho là đang hoạt động here.

Ngoài ra, bạn có thể quyết định triển khai bàn phím của riêng mình. Trong trường hợp bạn muốn làm điều đó, bạn có thể thấy việc triển khai Android here. Bạn có thể sao chép điều này và sửa đổi nó trực tiếp cho phù hợp với nhu cầu của bạn.