Ho visto in alcune applicazioni che il layout cambia quando viene visualizzata la tastiera software. Questo non è certamente lo adjustPan
perché l'intero layout (probabilmente il layout interno) cambia, non solo l'attuale EditText
. Questo è ad esempio nella schermata di accesso di Evernote. Puoi consigliare come è fatto?Regola il layout quando la tastiera software è attiva
risposta
Ecco una soluzione che funziona come la schermata di login Evernote:
In primo luogo, definire una classe che sarà la vostra LinearLayout speciale come questo:
public class MyLayout extends LinearLayout {
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyLayout(Context context) {
super(context);
}
private OnSoftKeyboardListener onSoftKeyboardListener;
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
if (onSoftKeyboardListener != null) {
final int newSpec = MeasureSpec.getSize(heightMeasureSpec);
final int oldSpec = getMeasuredHeight();
if (oldSpec > newSpec){
onSoftKeyboardListener.onShown();
} else {
onSoftKeyboardListener.onHidden();
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) {
this.onSoftKeyboardListener = listener;
}
public interface OnSoftKeyboardListener {
public void onShown();
public void onHidden();
}
}
Questo layout ascolta per misurare i cambiamenti, e se la nuova le misure sono < rispetto a quelle precedenti, il che significa che parte della schermata viene mangiata dalla tastiera virtuale.
Anche se, per funzionare, nel file manifest è necessario impostare android:windowSoftInputMode="adjustResize"
in modo che il contenuto venga ridimensionato e non solo spostato.
E tutto il sistema funziona come segue: Hai il layout:
<MyLayout id="layout">
<SomeImage id="image"/>
<SomeText>
<SomeInput>
</MyLayout>
E 'come evernotes schermata di login. Poi, nella vostra attività:
((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() {
@Override
public void onShown() {
findViewById(R.id.image).setVisibility(View.GONE);
}
@Override
public void onHidden() {
findViewById(R.id.image).setVisibility(View.VISIBLE);
}
});
Poi vai a manifest.xml e impostare
android:windowSoftInputMode="adjustResize"
Che cosa succederà, è quando viene mostrato tastiera virtuale, che sarà nascondere l'immagine e ridimensionerà l' resto del contenuto. (Puoi vedere effettivamente come viene ridimensionato il testo in Evernote)
Image hide è, ovviamente, una delle tante cose che puoi fare. Ma devi stare attento, dal momento che diverse modifiche al layout richiederanno anche la misura.
Ovviamente è una variante sporca. È necessario verificare le modifiche all'orientamento e il momento giusto in cui effettivamente si effettuano le misurazioni, e forse un po 'più di logica quando si confrontano le nuove specifiche con quelle vecchie. Ma penso che questo sia l'unico modo per farlo.
Utilizziamo lo stesso approccio nei nostri progetti. Lo odio ma sembra che sia l'unico modo per collegare eventi IME mostrati/nascosti su Android 2.x. – Michael
Questo a volte ha alcuni bug. Questa versione è migliore: http://stackoverflow.com/questions/2150078/android-is-software-keyboard-shown/4737265#4737265 –
Non funziona correttamente su Galaxy S4. Per correggere è necessario modificare if (oldSpec> newSpec) .. else ... per sostituire il 'else' con if (oldSpec
Spero che ti aiuta:
http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html
http://davidwparker.com/2011/08/30/android-how-to-float-a-row-above-keyboard/
Il secondo collegamento è stato molto utile. –
Questo ha funzionato per me..Put questa è la tua OnCreate
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Usa "adjustResize" invece di "adjustPan" in AndroidManifest.xml
<activity
...
android:windowSoftInputMode="adjustResize" />
Dal documentation:
"adjustResize"
La finestra principale del attività è sempre ridimensionata per fare spazio per la tastiera virtuale sullo schermo.
finestra principale "adjustPan" del attività non è ridimensionata per fare spazio per la tastiera virtuale. Piuttosto, il contenuto della finestra viene automaticamente spostato in modo che la messa a fuoco corrente non sia mai oscurata dalla tastiera e gli utenti possano sempre vedere che cosa stanno digitando. Questo è generalmente meno desiderabile del ridimensionamento, poiché l'utente potrebbe dover chiudere la tastiera virtuale per accedere e interagire con le parti oscurate della finestra.
utilizzare la visualizzazione di scorrimento nel layout all'interno del genitore e rimuovere l'impostazione adjustpan o adjustesize dal file manifest. ScrollView sul tuo layout ti darà la funzionalità gratuita per scorrere la panoramica o il layout con il layout specificato e anche proteggere il tuo layout per sovrascrivere la barra degli strumenti o la barra di azione e inoltre non nasconderà i pulsanti oi campi di testo all'interno del layout. Ricorda che devi usare ScrollView all'interno del layout di base, quindi questa scrollview funzionerà come layout di base per l'intero schermo. esempio
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Add here which you want -->
</LinearLayout>
</ScrollView>
La risposta selezionata non funziona per la modalità a schermo intero. Seguendo una soluzione linea ha lavorato per me:
AndroidBug5497Workaround.assistActivity(this);
copia della classe AndroidBug5497Workaround da:
Android How to adjust layout in Full Screen Mode when softkeyboard is visible
Grazie, funziona. Nel mio caso un layout è troppo complesso e, dopo un po 'di posizionamento all'interno di un'attività quando appare una tastiera, può bloccarsi (con Memoria esaurita). – CoolMind
- 1. Mostra layout quando si apre la tastiera software
- 2. Regolare scrollview quando la tastiera è attiva
- 3. Il layout dovrebbe aumentare quando la tastiera software è stata visualizzata in Android
- 4. stile dello schermo quando la tastiera virtuale è attiva
- 5. Regola il layout quando viene visualizzata o nascosta la tastiera virtuale Android
- 6. Android - Regola lo schermo quando viene visualizzata la tastiera?
- 7. forzare la tastiera software per mostrare quando EditText diventa attivo
- 8. Impedire il blocco della tastiera software
- 9. Nascondi tastiera software
- 10. Come evitare modifiche nell'interfaccia utente di Android, quando la tastiera è attiva o l'orientamento è cambiato?
- 11. Tastiera software specifica per Android
- 12. Spazio vuoto quando tornerò in attività (tastiera software forzata)
- 13. Tastiera software Android non funzionante
- 14. Scopri quando il layout della tastiera viene modificato
- 15. Mostra tastiera software senza EditText
- 16. Lingua layout tastiera Android
- 17. Il contenuto ionico ionico non si regola correttamente quando la tastiera mostra
- 18. Nascondi tastiera software non funzionante
- 19. Android morbido layout di tastiera bottino quando appare
- 20. Prevenzione del ridimensionamento del viewport della pagina Web quando è attiva la tastiera virtuale Android
- 21. La tastiera virtuale non attiva lo scorrimento in ScrollView
- 22. L'evento pulsante di invio modulo non viene catturato quando la tastiera è attiva iOS 7
- 23. Intellij ignora il layout di tastiera selezionato
- 24. È possibile attivare sempre il software per attivare/disattivare la tastiera su iOS Simulator?
- 25. Il campo di testo HTML in WebView in un'applicazione Android è nascosto dalla tastiera software
- 26. Preservare il layout della tastiera nell'app swing?
- 27. Come interrompere la visualizzazione della tastiera software quando viene modificata la messa a fuoco (evento OnStart)
- 28. Nascondere la tastiera di input software quando la finestra di dialogo si chiude
- 29. Come presentare il foglio di azione di UIAlertController mentre la tastiera è attiva?
- 30. È possibile avere sia la tastiera fisica che la tastiera virtuale attive contemporaneamente?
è il tuo problema che il layout sposta verso l'alto quando viene visualizzata la tastiera? –
La domanda è come farlo. – Eugene
Significa che non vuoi che il tuo Layout debba apparire, giusto? –