Ottenere le size della tastiera soft

C'è un modo per conoscere la dimensione della tastiera visualizzata sullo schermo?

Sto usando Cocos2dx per la programmazione, ma voglio sapere l'altezza della tastiera mostrata sullo schermo nella parte di Android o della parte di Cocos, non import.

  • Quali API sono supportte quando l'accelerazione hardware è triggersta su Honeycomb?
  • Applicare un tema a v7 Support Action Bar
  • Come caricare immagini nella galleria di emulatore android
  • Aggiungi productFlavor alla libreria sperimentale plugin di gradle di Android
  • Android - Controllo se editText è> 3 prima e dopo l'immissione dell'utente
  • Android Google Maps ottiene le coordinate di border
  • So che la tastiera ha un metodo getHeight () ma non voglio creare nuove tastiere, voglio utilizzare quello predefinito.

  • Come posso distriggersre la logging interna di Android per i tag specifici (ad es. AbsListView, GestureDetector, sospensione)
  • Come rimuovere un'authorization aggiunta a causa di Google Fitness API 7.5.0
  • SQLiteConstraintException: codice di errore 19: vincolo non riuscito
  • Riproduci rapporti di archiviazione "Il tuo dispositivo non è compatibile con questa versione", ma viene installato tramite adb appena su Nexus7
  • Lo stato di visualizzazione di frammento di Android all'interno di un host di tab
  • possiamo avere sia l'ascoltatore di Button e onTemClick in ListView in android?
  • 10 Solutions collect form web for “Ottenere le size della tastiera soft”

    Lo abbiamo fatto con questo

    myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub Rect r = new Rect(); parent.getWindowVisibleDisplayFrame(r); int screenHeight = parent.getRootView().getHeight(); int heightDifference = screenHeight - (r.bottom - r.top); Log.d("Keyboard Size", "Size: " + heightDifference); //boolean visible = heightDiff > screenHeight / 3; } }); 

    Abbiamo solo ridimensionare le viste con la tastiera, in modo da poterli utilizzare.

     Rect r = new Rect(); View rootview = this.getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); 

    Risultato di questa è la quantità di spazio che l'applicazione utilizza sullo schermo (funziona anche quando l'attività non viene ridimensionata). Ovviamente lo spazio dello schermo rimanente verrà utilizzato dalla tastiera (se è visibile)

    Trovato qui: https://github.com/freshplanet/ANE-KeyboardSize/blob/master/android/src/com/freshplanet/ane/KeyboardSize/getKeyboardY.java

    se la tua attività non è a pieno schermo, usando il codice qui sotto:

     content.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub if (keyBoardHeight <= 100) { Rect r = new Rect(); content.getWindowVisibleDisplayFrame(r); int screenHeight = content.getRootView() .getHeight(); int heightDifference = screenHeight - (r.bottom - r.top); int resourceId = getResources() .getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { heightDifference -= getResources() .getDimensionPixelSize(resourceId); } if (heightDifference > 100) { keyBoardHeight = heightDifference; } Log.d("Keyboard Size", "Size: " + heightDifference); } // boolean visible = heightDiff > screenHeight / 3; } }); 

    Se si desidera calcolare l'altezza della tastiera virtuale mentre l'attività non cambia nella dimensione (adjustPan), è ansible utilizzare questo esempio:

    https://github.com/siebeprojects/samples-keyboardheight

    Utilizza una window nascosta per calcolare la differenza di altezza tra la window e la vista di base dell'attività.

    Non puoi dire. No, davvero: semplicemente non puoi dire.

    La tastiera non deve essere una forma particolare. Non deve essere posizionato nella parte inferiore dello schermo ( molte delle opzioni più diffuse non lo sono ), non deve mantenere la dimensione attuale quando si cambiano i campi di text (quasi nessuno dipende dalle flag). Non deve nemless essere rettangular . Può anche prendere in considerazione l' integer schermo .

    So che questo è un vecchio post, ma ho notato che la soluzione scelta per me non funzionava su tutti i dispositivi. Sembrava che ci fosse una discrepanza e così ho implementato questo e sembra essere un catch all:

      final int[] discrepancy = new int[1]; discrepancy[0] = 0; // this gets the height of the keyboard content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); View rootview = activity.getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); int screen_height = rootview.getRootView().getHeight(); int keyboard_height = screen_height - (r.bottom + r.top) - discrepancy[0]; if (discrepancy[0] == 0) { discrepancy[0] = keyboard_height; if (keyboard_height == 0) discrepancy[0] = 1; } int margin_bottom = keyboard_height + Helper.getDp(10, activity); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) carousel_container.getLayoutParams(); params.setMargins(0, 0, 0, margin_bottom); //boolean visible = heightDiff > screenHeight / 3; } }); 

    Quando l'ascoltatore viene chiamato per la prima volta, misura lo schermo senza una tastiera e se c'è una discrepanza, la contai la prossima volta. Se non esiste alcuna discrepanza, ho impostato la discrepanza su 1 solo per cui non è più 0.

    in cocos2d-x abbiamo CCEditBox.

    Estensioni interne-> GUI-> CCEditBox, è ansible trovare la class CCEditBox.

    La bellezza è che nasconde la tastiera di toccare da qualche altra parte sulla scena. e sposta automaticamente la tastiera in su se la tua casella di modifica è stata posta troppo bassa sulla scena.

    Se si utilizza cocos2d-x v2.1.3 allora è ansible navigare al progetto di esempio andando a

    samples-> cpp-> TestCpp-> Classes-> ExtensionTest-> EditBoxTest.

    Da ora in poi lo userò invece di CCTextField. solo l'ho incontrato ieri 🙂

    Il ROOT_VIEW di una schermata dello schermo android può essere visualizzata come una vista a schermo singolo con VISIBLE DISPLAY FRAME che visualizza la visualizzazione della tua attività.

    Questo VISIBILE DISPLAY FRAME è regolato quando il SOFT KEYBOARD è visualizzato o nascosto dallo schermo.

    NOTA: Si prega di guardare le due immagini cliccando sui collegamenti indicati di seguito per una migliore comprensione

    Così la visualizzazione ROOT di una schermata di visualizzazione può essere visualizzata come: RootView della schermata di visualizzazione

    La regolazione di VISIBLE DISPLAY FRAME con l'apertura e la chiusura di SOFT KEYBOARD può essere visualizzata come: VISIBLE_DISPLAY_SCREEN

    Questa regolazione del VISUAL DISPLAY FRAME può essere usata molto bene per scoprire l'altezza della tastiera come:

    (quando la tastiera è aperta)

    SOFT_KEYBOARD_HEIGHT = ROOT_VIEW_HEIGHT – (VISUAL_DISPLAY_FRAME_HEIGHT + EXTRA_SCREEN_HEIGHT)

    Il codice per get quanto sopra è:

     int mExtraScreenHeight=-1, mKeyboardHeight=-1; boolean mKeyboardOpen; rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int rootViewHeight, visibleDisplayFrameHeight, fakeHeight; /* (rootViewHeight - visibleDisplayFrameHeight) is not the real height of the keyboard it is the fake height as it also consist of extra screen height so FAKE_HEIGHT = KEYBOARD_HEIGHT + EXTRA_SCREEN_HEIGHT To get keyboard height extra screen height must be removed from fake height */ Rect rect = new Rect(); rootView.getWindowVisibleDisplayFrame(rect); rootViewHeight = rootView.getRootView().getHeight(); visibleDisplayFrameHeight = rect.height(); fakeHeight = rootViewHeight-visibleDisplayFrameHeight; if (mExtraScreenHeight == -1){ mExtraScreenHeight=fakeHeight; } /* Suppose the soft keyboard is open then the VISIBLE_DISPLAY_FRAME is in reduced size due to the space taken up by extra screen and the keyboard but when the soft keyboard closes then KEYBOARD_HEIGHT=0 and thus FAKE_HEIGHT = EXTRA_SCREEN_HEIGHT */ else if (fakeHeight <= mExtraScreenHeight){ mExtraScreenHeight=fakeHeight; mKeypadOpen=false; } else if (fakeHeight > mExtraScreenHeight){ mKeypadHeight=fakeHeight-mExtraScreenHeight; mKeypadOpen=true; } } }); 

    NOTA : La function onGlobalLayout () verrà chiamata solo quando il layout globale cambia come quando si apre la tastiera soft. Quindi la tastiera morbida deve essere aperta alless una volta per get l'altezza morbida della tastiera.

    Ha lavorato per me;)

    Mi dispiace per non essere in grado di commentare, due o tre delle risposte mi hanno aiutato a risolvere il problema e sono state correlate all'utilizzo dell'AdOnGlobalLayoutListener e quindi alla determinazione dell'altezza rimanente prima e dopo la comparsa di una tastiera.

    La soluzione che ho usato è stata basata sulla risposta di Rudy_TM.

    Tuttavia, una cosa che ho dovuto trovare è che, affinché tale metodo funzioni, devi avere la seguente linea da qualche parte

     Window.SetSoftInputMode(SoftInput.AdjustResize); 

    Prima di avere SoftInput.AdjustNothing (o qualcosa del genere) e non functionrebbe. Ora funziona perfettamente. Grazie per le risposte!

    Dopo ore di ricerca ho trovato una soluzione se si desidera impostare windowSoftInput="adjustPan"

    Ecco lo snippet di codice:

      final View root = findViewById(android.R.id.content); root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { Rect r = new Rect(); { root.getWindowVisibleDisplayFrame(r); } @Override public void onGlobalLayout() { Rect r2 = new Rect(); root.getWindowVisibleDisplayFrame(r2); int keyboardHeight = r.height() - r2.height(); if (keyboardHeight > 100) { root.scrollTo(0, keyboardHeight); } else { root.scrollTo(0, 0); } } }); 

    In questo codice dopo aver trovato l'altezza della tastiera, scorgo la vista fino a non essere coperta dalla tastiera che è il motivo principale per trovare l'altezza della tastiera.

    Secondo i documenti :

    void getWindowVisibleDisplayFrame(Rect outRect) : recupera la dimensione complessiva visualizzata nel quale è stata posizionata la window in cui questa vista è collegata.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.