/ / WindowSoftInputMode e ScrollView - Android, android-layout

WindowSoftInputMode e ScrollView - Android, android-layout

A atividade principal do meu aplicativo Android se parece com isso:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:orientation="vertical" >

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:orientation="vertical"
android:paddingLeft="60dp"
android:paddingTop="53dp" >

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/billAmountText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/billAmount_string"
android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
android:id="@+id/billAmount"
android:layout_width="173dp"
android:layout_height="wrap_content"
android:layout_below="@id/billAmountText"
android:layout_marginTop="3dp"
android:inputType="numberDecimal" />
</RelativeLayout>
</ScrollView>

</RelativeLayout>

Para garantir que a imagem de fundo (definida no primeiro RelativeLayout) não seja comprimida quando o teclado aparecer, defini android:windowSoftInputMode="stateVisible|adjustPan no arquivo de manifesto da minha atividade. Tudo bem com o plano de fundo e layout agora, nada é redimensionado.

Mas o problema é que meu ScrollView não faztrabalho agora porque eu suponho que o sistema acha que a janela não precisa ser redimensionada devido a minha modificação acima no manifesto - então o ScrollView não está ativado. O oposto acontece quando eu tomo android:windowSoftInputMode="stateVisible|adjustPan fora, a rolagem funciona, mas o fundo fica comprimido quando o teclado aparece.

Existe alguma maneira de codificá-lo para que meu fundo não fique espremido, e meu ScrollView ainda funciona? Obrigado!

Respostas:

3 para resposta № 1

Tente usar em sua atividade a propriedade windowSoftInputMode com os seguintes valores:

android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

Eu não sei se é necessário, mas você pode tentar adicionar ao seu layout ScrollView marcar o fillViewPort para true. Então deve parecer algo que eu mostro abaixo:

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true">

<!-- Other Views -->
</ScrollView>

Deixe-me saber sobre o seu progresso.


1 para resposta № 2

Em sua rolagem coloque um layout relativo, criança 0é uma visualização de imagem e criança 1 é o seu conteúdo. Use a imageview para sua imagem de plano de fundo (src) em vez do plano de fundo da vista de rolagem. A imageview respeitará scaleTypes, enquanto o plano de fundo de um layout não.