2010-08-18 11 views
5

Tôi tự hỏi làm thế nào tôi có thể tạo cửa sổ bật lên tùy chỉnh như trong hình dưới đây (mượn từ Swype bàn phím), nơi tôi có thể có một vài nút, mỗi nút cam kết một chuỗi với "hiện đang được kết nối" TextView (qua số InputConnection).Android IME: hiển thị hộp thoại bật lên tùy chỉnh (như bàn phím Swype) có thể nhập văn bản vào TextView

Xin lưu ý: đây là InputMethodService và không phải là thông thường Activity. Tôi đã cố gắng khởi chạy Activity riêng biệt với Theme:Dialog. Tuy nhiên, ngay khi cái đó mở ra, tôi mất tập trung với TextView và bàn phím của tôi biến mất (và với điều đó InputConnection của tôi đã biến mất).

Swype

Trả lời

2

Bạn có thể thử sử dụng một PopupWindow. Bạn sẽ phải làm một chút hack để có được nó để làm những gì bạn muốn và tài liệu tốt duy nhất cho nó là nguồn.

+0

Tuyệt. Cảm ơn gợi ý. Tôi đã đi qua mã nguồn bàn phím của Android, vì vậy tôi khá quen với điều đó :-) – znq

+0

@znq, bạn đã thực sự quản lý để làm điều này? Bạn đã kết thúc bằng cách sử dụng một 'PopupWindow' hay cái gì khác? Bạn có thể cung cấp con trỏ không? –

+0

Điều quan trọng là tạo PopupWindow trong lớp con KeyboardView của bạn, KHÔNG ở trong InputMethodService hoặc bất kỳ nơi nào khác. Sử dụng vị trí Y âm nếu bạn muốn nó xuất hiện phía trên bàn phím. –

1

Hòa bình được khi những người làm theo sự hướng dẫn,

giải pháp:

AlertDialog dialog; 

//add this to your code 
dialog = builder.create(); 
Window window = dialog.getWindow(); 

WindowManager.LayoutParams lp = window.getAttributes(); 
lp.token = mInputView.getWindowToken(); 
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 

window.setAttributes(lp); 
window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
//end addons 

dialog.show(); 

===== CẬP NHẬT 2015/09/30 mInputView tên chung của lớp bàn phím của bạn ..see

Thông tin
@Override 
    public View onCreateInputView() { 
     mInputView =(MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null); 
.... 
} 

thêm: http://developer.android.com/guide/topics/text/creating-input-method.html

chúc may mắn.

+1

mInputView là gì? – Blundell

+0

cảnh báo là gì? –

1

Tôi cũng đang đập đầu vào vấn đề này và cuối cùng tôi đã tìm ra. Các giải pháp trên là chính xác mặc dù như bạn đã chỉ ra rằng chúng không thể được sử dụng từ một InputMethodService vì nó không phải là một Activity. Bí quyết là tạo PopupWindow trong lớp con của KeyboardView. Bằng cách sử dụng vị trí Y âm, PopupWindow có thể xuất hiện phía trên bàn phím như Swype.

Chúc may mắn, Barry

+0

Tôi muốn một số mã Làm thế nào để làm cho nó xem –

1

câu trả lời đúng:

  1. Tạo một PopupWindow và đặt quan điểm của mình bên trong nó
  2. Gọi popupWindow.setClippingEnabled(false)
  3. Gọi [popupWindow.showAtLocation()] (http://developer.android.com/reference/android/widget/PopupWindow.html#showAtLocation(android.view.View, int, int, int)) với tọa độ Y âm.

Điều này sẽ hiển thị cửa sổ bật lên phía trên IME như trong ảnh chụp màn hình của bạn.

+0

Điều này chắc chắn là câu trả lời đúng! Cần phiếu bầu ở đây ... – mehmet6parmak