SORU
12 Kasım 2010, Cuma


nasıl dışarıda EditText tıkladıktan sonra android sanal klavye gizlemek için?

Tamam herkes bir klavye gizlemek için uygulamak gerektiğini biliyor:

InputMethodManager imm = (InputMethodManager) getSystemService(
    INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

Sorun burada kullanıcı veya bir EditBox veya softKeyboard değil, başka bir yere dokunur seçtiğinde klavyeyi gizlemek için nasıl?

Benim ana Etkinliği onTouchEvent kullanmaya çalıştım ama yalnızca kullanıcı dokunduğu herhangi bir diğer görüş dışında etkili ve scrollview yok.

Dokunuş, bir tıklama uygulamak, herhangi bir başarı olmadan dinleyici odaklanmaya çalıştım.

Ben bile dokunma olayları durdurmak için kendi scrollview uygulamak için çalıştı ama sadece olayın koordinatlarını ve görünümü tıklandığında değil alabilirim.

Bunu yapmak için standart bir yol var mı?? iPhone gerçekten kolay oldu.

CEVAP
25 Temmuz 2012, ÇARŞAMBA


Burada benim uygulama için ne yaptım, ve, bekle, mükemmel gibi çalışıyor!

İlk burada sadece klavye gizler kodu:

public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

Bu programı bir sınıf koymak, ya da eğer bir faaliyet içinde tanımlıyorsanız, etkinlik parametresi önlemek veya hideSoftKeyboard(this) Ara.

En zor kısmı onu aramak için zaman. Sen-ebilmek yazmak bir yöntem olduğunu yineler her View faaliyet ve kontrol eğer instanceof EditText konuşma kaydı setOnTouchListener bileşen ve her şey düşecek. Bunun nasıl olduğunu merak ediyorsanız, aslında oldukça basit. Ne burada, aşağıdaki gibi özyinelemeli bir yöntem yazmak, yazı vb Kur özel gibi aslında bu bir şey yapmak için kullanabilirsiniz,... Burada yöntemi

public void setupUI(View view) {

    //Set up touch listener for non-text box views to hide keyboard.
    if(!(view instanceof EditText)) {

        view.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(MyActivity.this);
                return false;
            }

        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i  ) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            setupUI(innerView);
        }
    }
}

10 ** etkinlik sonrasında, sadece bu yöntemi çağırın. Geçmesi ne olduğunu merak ediyorsanız, üst kabı id. id ebeveyn için bir ad atayın

<RelativeLayoutPanel android:id="@ id/parent"> ... </RelativeLayout>

ve tüm bu setupUI(findViewById(R.id.parent)), Ara.

Kullanmak istiyorsanız bu etkili olabilir oluşturmak genişletilmiş Activity ve koyun bu yöntemde, ve tüm diğer faaliyetleri uygulama genişletmek bu aktivite ve çağrı setupUI() onCreate() yöntem.

Umarım yardımcı olur.

Eğer üst düzen için 1'den fazla etkinlik ortak kimliği tanımlamak gibi kullanırsanız <RelativeLayout android:id="@ id/main_parent"> ... </RelativeLayout>

Sonra Activity sınıf genişletmek ve OnResume() İçinde setupUI(findViewById(R.id.main_parent)) tanımlamak ve `Etkinlik yerine bu sınıfı genişletirin your program

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006