2010-08-18 21 views
5

'a metin girebilen özel bir pop-up iletişim kutusu (Swype klavye gibi), aşağıdaki ekran görüntüsünde özel bir pop-up nasıl oluşturabileceğimi merak ediyorum (Swype'dan ödünç alındı) klavye), her biri şu anda "bağlı" TextView (InputConnection aracılığıyla) için bir dize bağlayan birkaç düğüme sahip olabilirsiniz.Android IME: TextView

Lütfen dikkat: bu bir InputMethodService ve sıradan bir Activity değil. Ben zaten Theme:Dialog ile ayrı bir Activity başlatmayı denedim. Ancak, açıldığı anda TextView ile odağımı kaybediyorum ve klavyem kayboluyor (ve bununla birlikte InputConnection gitmiş oluyor).

Swype

cevap

2

Bir PopupWindow kullanmayı deneyebilirsiniz. İstediğini yapmak için biraz hack yapman gerekecek ve bunun için tek iyi doküman kaynak. Barış rehberlik takip edenler üzerine olsun

+0

Serin. İpucu için teşekkürler. Zaten Android'in klavye kaynak koduna giriyorum, bu yüzden ben gerçekten bu :-) – znq

+0

@ zq, ben bunu yapmak için başardınız mı? Bir "PopupWindow" kullanarak başka bir şey mi yaptın? İşaretçi sağlayabilir misiniz? –

+0

KeyboardView alt sınıfınızda, PopupWindow'u oluşturmak için, InputMethodService'de veya başka bir yerde önemli değil. Klavyenin üstünde görünmesini istiyorsanız, negatif bir Y konumu kullanın. –

1

,

çözüm:

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(); 

===== GÜNCELLEME 2015/09/30 mInputView Klavyeniz sınıfın genel adı ..see

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

diğer bilgiler: http://developer.android.com/guide/topics/text/creating-input-method.html

iyi şanslar.

+1

mInputView nedir? – Blundell

+0

Ne uyarı? –

1

Başımı bu probleme karşı da vuruyordum ve sonunda anladım. Yukarıdaki çözümler doğrudur, ancak belirttiğiniz gibi bunlar bir ActivityMethodService'den kullanılamaz çünkü bir Etkinlik değildir. Hile, KeyboardView'un bir alt sınıfında PopupWindow 'u oluşturmaktır. Negatif bir Y konumu kullanarak, PopupWindow klavyenin üstünde Swype gibi görünebilir.

İyi şanslar, Barry

+0

Bazı kodlar istiyorum Nasıl görünmeli –

1

Doğru cevap:

  1. bir PopupWindow oluşturun ve içine
  2. Çağrı popupWindow.setClippingEnabled(false)
  3. Çağrısı [popupWindow.showAtLocation()] (http://developer.android.com/reference/android/widget/PopupWindow.html#showAtLocation(android.view.View görünümünüzü koymak, int, int, int)) negatif Y koordinatı ile.

Bu, ekran görüntüsünde olduğu gibi, IME'nin üzerindeki açılır pencerenizi gösterecektir.

+0

Bu kesinlikle doğru cevap! Burada oy gerekiyor ... – mehmet6parmak