2010-08-25 21 views
20

Herezje dylematu: ja pokazano ekran z 3 pól wejściowych i 2 przyciski wewnątrz z zakładką (są tam 3 zakładki całkowity, a oni są na dole ekranu). 2 przyciski są ustawione na dole po lewej i prawej stronie ekranu, tuż nad zakładkami. kiedy klikam na pole wprowadzania, zakładki i przyciski są wypychane na klawiaturę.Android: jak rozpoznać, czy klawiatura jest wyświetlana, czy nie?

pragnę tylko naciskać przyciski w górę i opuścić zaczepy gdzie pierwotnie są na dole. Zastanawiam się nad ustawieniem widoczności zakładek na GONE, gdy stwierdzę, że wyświetlana jest klawiatura miękka i widoczność VISIBLE po zniknięciu miękkiej klawiatury.

jest jakiś rodzaj słuchacza na klawiaturze programowej, czy może polu tekstowym? może jakieś trudne użycie OnFocusChangeListener dla tekstu edycji? Jak ustalić, czy klawiatura jest widoczna czy nie?

+0

to sprawdzić: http://stackoverflow.com/questions/4745988/how-do-i-detect-if-software-keyboard-is-visible-on-android-device/31090451#31090451 Działa dobrze dla mnie. –

+0

Możliwy duplikat [Jak sprawdzić widoczność klawiatury programowej w systemie Android?] (Http: // stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android) – afathman

Odpowiedz

5

Ustalenie, czy klawiatura jest wyświetlana najwyraźniej nie jest możliwe.

Możesz chcieć wyłączyć to wszystko razem z tagiem xml windowSoftInputMode w manifeście: http://developer.android.com/reference/android/R.attr.html#windowSoftInputMode. Lub możesz rzucić okiem na to, jak usunąć ostrość, aby ukryć klawiaturę: Hide soft keyboard on activity without any keyboard operations.

Żadne nie rozwiąże dokładnie problemu. Pamiętam, jak czytałem bloga zdecydowanie zalecając, aby nie używać zakładek u dołu, a nie u góry ekranu, z powodów jasności interfejsu użytkownika. Polecam ci to.

+1

Czy nie jest jeszcze możliwe wiarygodne określenie, czy wyświetlana jest klawiatura ekranowa? Minęło pięć lat od ... –

0

To może pomóc http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html

https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/java/src/com/android/inputmethod/latin

Kod klawiatura jest tutaj, ja grepped przez to trochę jednak zrezygnować, nie widzę żadnych Transmisje wysyłane byłoby jakiegokolwiek użytkowania, przynajmniej tutaj. Może uda ci się znaleźć kod na niższym poziomie w repozytorium i znaleźć przydatne przesłanie. Pierwszy link może ci powiedzieć, kiedy stanie się widoczny, ale nie jestem pewien, jak powiedzieć, kiedy stanie się niewidoczny.

-5

W moim ostatnim zastosowaniu miałem pewne problemy w wyświetlaniu klawiatury ekranowej, a następnie Użyłem następujący kod w moim pliku manifestu:

<activity android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation" android:name=".rate.Calculator"/>

1

O ile wiem, żargon.

Jednakże, można monitorować zmiany rozmiaru układu, a od klawiatury wyświetlane jest główną przyczyną zmienia rozmiar, może być w stanie przyjąć, że klawiatura jest wyświetlana lub nie.

Oto przykładowy kod do monitorowania sortujący zmiany układu. Po prostu użyj tego układu jako rodzica oryginalnego układu i użyj jego słuchacza. Jeśli wysokość spadła, możesz założyć, że klawiatura jest wyświetlana, a jeśli została zwiększona, możesz założyć, że została zamknięta.

public class LayoutSizeChangedSensorFrameLayout extends FrameLayout { 
    public enum SizeChange { 
     HEIGHT_INCREASED, HEIGHT_DECREASED, WIDTH_INCREASED, WIDTH_DECREASED 
    } 

    public interface OnLayoutSizeChangedListener { 
     void onSizeChanged(EnumSet<SizeChange> direction); 
    } 

    private OnLayoutSizeChangedListener mLayoutSizeChangeListener; 

    public LayoutSizeChangedSensorFrameLayout(final Context context) { 
     super(context); 
    } 

    public LayoutSizeChangedSensorFrameLayout(final Context context, final AttributeSet attributeSet) { 
     super(context, attributeSet); 
    } 

    public LayoutSizeChangedSensorFrameLayout(final Context context, final AttributeSet attrs, final int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     if (mLayoutSizeChangeListener != null) { 
      final EnumSet<SizeChange> result = EnumSet.noneOf(SizeChange.class); 
      if (oldh > h) 
       result.add(SizeChange.HEIGHT_DECREASED); 
      else if (oldh < h) 
       result.add(SizeChange.HEIGHT_INCREASED); 
      if (oldw > w) 
       result.add(SizeChange.WIDTH_DECREASED); 
      else if (oldw < w) 
       result.add(SizeChange.WIDTH_INCREASED); 
      if (!result.isEmpty()) 
       mLayoutSizeChangeListener.onSizeChanged(result); 
     } 
    } 

    public void setOnLayoutSizeChangedListener(final OnLayoutSizeChangedListener layoutSizeChangeListener) { 
     this.mLayoutSizeChangeListener = layoutSizeChangeListener; 
    } 

    public OnLayoutSizeChangedListener getOnLayoutSizeChangeListener() { 
     return mLayoutSizeChangeListener; 
    } 
} 
Powiązane problemy