Come mantenere la dimensione dell'image di background quando viene visualizzata la tastiera software

Quando viene visualizzata la tastiera del software, ridimensiona il layout e in questo modo si schiva l'image di background insieme. La mia domanda è fondamentalmente un duplicato di questa domanda, che viene spiegato in un modo molto buono:

La tastiera software ridimensiona l'image di background su Android

  • È opportuno aggiungereToBackStack e sostituire una transazione di frammento?
  • Installazione applicazione non rioutput - INSTALL_FAILED_VERIFICATION_FAILURE
  • Come get un messaggio di posta elettronica per il numero di telefono di particualr
  • Come impedire a un utente di distriggersre l'applicazione di amministrazione del dispositivo tramite il menu delle impostazioni?
  • Qual è lo stato di una scheda compressa in Android?
  • agitazione / avvolgimento vista animation in android
  • Tuttavia, questa domanda è stata chiusa quando hanno trovato un hack per risolverlo. Non posso usare questo hack. Il mio integer layout è dentro un ScrollView e devo essere in grado di utilizzare correttamente questo scrollview. Utilizzando android: windowSoftInputMode = "stateVisible | adjustPan" l'utente non sarà in grado di scorrere verso il basso e vedere la parte inferiore dello schermo mentre la tastiera sta mostrando, poiché il layout in parte esisterà dietro la tastiera. Quindi la soluzione è inaccettabile per me. Ci sono migliori soluzioni là fuori?

    Saluti,

  • Schermata di spruzzatura durante il caricamento di un URL in una videata in applicazioni Android
  • Come implementare OnZoomListener su MapView
  • Aggiunta di un button a una vista personalizzata di InfoWindowAdapter che può registrare i clic
  • accesso app laravel da app android con token csrf
  • Incrementa TextView con il button di button
  • Dimensione database di Android non diminuisce su HTC Thunderbolt
  • 9 Solutions collect form web for “Come mantenere la dimensione dell'image di background quando viene visualizzata la tastiera software”

    In realtà mi sono imbattuto in un problema simile non troppo tempo fa. Mi sono imbattuto sulla giusta risposta con un po 'di lavoro.

    Nel tuo android manifesto per questo progetto, allegato all'attività specifica che stai utilizzando, utilizza la linea android:windowSoftInputMode="adjustPan|stateVisible" nel tag di attività.

    adjustPan significa fondamentalmente che la tua attività non si ridimensiona per adattarsi alla tastiera soft e stateVisible significa che la tastiera soft verrà visualizzata quando richiesto (questo può essere stateAlwaysVisible , ecc se necessario)

    source: Dev Android per i tag di attività

    Dopo giorni di hacking hardcore ho finalmente riuscito a build una soluzione così avanzata che potrebbe danneggiarlo per leggerlo. Posiziono un ImageView con lo background dietro la scorrimento e impostato scaleType = "matrix" in modo che non si riduca quando viene visualizzata la tastiera.

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/mah_kewl_background" android:scaleType="matrix" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" > <RelativeLayout android:id="@+id/smsLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="PLUNX" /> </RelativeLayout> </ScrollView> </RelativeLayout> 

    È ansible utilizzare la properties; windowBackground, che rende il disegnatore adatto all'integer schermo. Per farlo è necessario:

    1- Crea uno stile:

     <style name="Background" parent="@android:style/Theme.NoTitleBar"> <item name="android:windowBackground">@drawable/you_bg_drawable</item> </style> 

    2- Imposta lo stile di attività in AndroidManifest.xml

     <activity android:name=".ui.your_activity" android:theme="@style/Background"/> 

    Stavo facendo una ricerca per una soluzione a questo problema esatto quando mi sono imbattuto, e dopo aver fatto alcune ricerche ho trovato una soluzione che penso sia leggermente migliore. Invece di eseguire l'hacking con un ImageView è ansible utilizzare questo dalla tua attività:

      getWindow().setBackgroundDrawableResource(R.drawable.bg_my_background); 

    Spero che aiuta chiunque altro a cercare una soluzione per questo.

    in Androidmanifest nell'utilizzo di tag di attività:

     <activity ... android:windowSoftInputMode="adjustPan" ></activity> 

    controllare il riferimento per Android Developer

    Non posso commentare la tua risposta, ma vorrei aggiungere qualcosa.

    Capisco il tuo dilemma e perché la soluzione a cui hai connesso non è una soluzione completa per la tua situazione (dal momento che non puoi scorrere fino alla parte inferiore della vista). Ho una situazione simile con una grande scatola di scorrimento EditText. Quando si apre la tastiera soft non mi piace che il mio background venga squished.

    Ho provato la tua soluzione e, a prima vista, sembra funzionare, ci sono alcune situazioni in cui potrebbe non essere ideale:

    1. Se consente alla tua applicazione di avere una modalità orizzontale, lo background non verrà ridimensionato / allungato
    2. Se esegui l'applicazione su un dispositivo con una schermata più big o un dpi, il tuo background potrebbe non riempire lo schermo

    Fondamentalmente sembra che quando si imposta la scaleType alla matrix , stai dicendo ad Android di disegnare lo background 1: 1 e non di scalare. Così che cosa succede quando si apre la tastiera soft utilizzando la soluzione è, il tuo scrollView e imageView sono tutti ridimensionati come al solito, ma l'image src impostata rimane 1: 1 continua quindi a mostrare la stessa area.

    Quindi se ad esempio l'image di background è stata impostata su una dimensione specifica (ad esempio 480 x 800) e riempie perfettamente il tuo Nexus One, il momento in cui si ruota verso il paesaggio avrai un'area nera a destra.

    Questo è ovvio, ovviamente, se il tuo background è semplicemente un model ripetuto, in questo caso puoi renderlo estremamente grande e speriamo di compensare varie schermate (forse anche le tavolette).

    Oppure puoi anche fornire sfondi diversi per diverse size / densità / orientamenti dello schermo, ma questo non rappresenta ancora la scalatura.

    In un vano sforzo per cercare di risolvere questo problema, mi sono imbattuto in un attributo di View denominato android:isScrollContainer . Questo attributo indica alcune voci se si possono ridimensionare quando viene visualizzata la tastiera soft. Questo è anche menzionato da qualcuno nella tua soluzione collegata. Ho provato a impostare questo (a false) sul ViewGroup contiene il mio background, ma qualsiasi elemento figlio che scorre sembra dominarlo causando nuovamente la squish.

    A partire da ora non credo che esista una soluzione completa per la nostra situazione. Il tuo funziona sicuramente in alcuni casi e vi ringrazio per lo sforzo. Speriamo che Google offrirà una soluzione in futuro, ma non credo che considererebbe questo un problema / priorità.

    Forse c'è un'altra soluzione (in realtà semplice!): In styles.xml: crea un nuovo stile come questo:

     <style name="Yourstyle" parent="AppBaseTheme"> <item name="android:windowBackground">@drawable/mybackground</item> </style> 

    AppBaseTheme è il tuo tema normalmente utilizzato per la tua applicazione. Quindi aggiungi in Manifest.xml:

     <activity android:name="com.your.app.name.Activity" android:theme="@style/Yourstyle"> </activity> 

    Quindi hai lo stesso stile ma con uno background.

    Importnte: non impostare sfondi nel tuo normale file .xml!

    È il mio primo post e spero che aiuta e mi dispiace per il mio inglese.

    Come su una soluzione in cui lo background è un layout. Possiamo gonfiare un layout, renderlo l'intera dimensione della window, quindi inserirlo come background di una window?

    Dopo un lungo periodo di ricerca …

    Mettere android:windowSoftInputMode="adjustPan|stateVisible" in each android:windowSoftInputMode="adjustPan|stateVisible"

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