Je développe une application dans laquelle l'image d'arrière-plan se rétrécit sur la fenêtre contextuelle du clavier. Mon .xml est le suivant:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:facebook="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/background" >
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
/**
Other stuff
*/
</RelativeLayout>
</ScrollView>
</RelativeLayout>
J'ai cherché sur Google et j'ai trouvé que, pour ajouter
Android:windowSoftInputMode="stateVisible|adjustPan"
dans mon fichier manifeste. Mais ce n'est d'aucune utilité.
Modifier:
Ma disposition avant l'apparition du clavier s'affiche:
Et après pop up comme:
Veuillez vérifier la différence dans l'image d'arrière-plan. Dans l'image 1, l'image est de taille et dans l'image 2, l'image d'arrière-plan est rétrécie. J'ai besoin que le pied de page et l'arrière-plan soient déplacés vers le haut dans la fenêtre contextuelle du clavier.
Ce que je manque ou fais mal, suggérez-moi.
Utilisez simplement dans votre onCreate()
ce code:
protected void onCreate(Bundle savedInstanceState) {
...
getWindow().setBackgroundDrawableResource(R.drawable.your_image_resource);
...
}
et supprimez cette ligne dans votre xml:
Android:background="@drawable/background"
Lire la suite sur:
http://developer.Android.com/reference/Android/view/Window.html
J'avais déjà rencontré le problème similaire une fois, le mien a été résolu en utilisant les propriétés ci-dessous dans le manifeste, utilisez-le là où votre activité est déclarée.
Android:windowSoftInputMode="stateHidden|adjustResize|adjustPan"
Ok si j'ai bien répondu à votre question, vous voulez une mise en page avec un arrière-plan et une vue de défilement. Et lorsque le clavier tactile apparaît, vous souhaitez redimensionner la vue de défilement, mais conserver l'arrière-plan en taille réelle, n'est-ce pas? si c'est ce que vous voulez, j'aurais peut-être trouvé une solution à ce problème:
Ce que vous pouvez faire, c'est faire 2 activités.
Activité 1:
public class StartActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent StartApp = new Intent(this, DialogActivity.class);
startActivity(StartApp); // Launch your official (dialog) Activity
setContentView(R.layout.start); // your layout with only the background
}
}
Activité2:
public class DialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); // get rid of dimming
this.requestWindowFeature(Window.FEATURE_NO_TITLE); //get rid of title bar (if you want)
setContentView(R.layout.dialog); //Dialog Layout with scrollview and stuff
Drawable d = new ColorDrawable(Color.BLACK); //make dialog transparent
d.setAlpha(0);
getWindow().setBackgroundDrawable(d);
}
}
commencer la mise en page:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/test"> //your background
</LinearLayout>
disposition de la boîte de dialogue:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- All your Scrollview Items -->
</LinearLayout>
</ScrollView>
</RelativeLayout>
AndroidManifest.xml
commencer l'activité:
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen">
activité de dialogue
Android:theme="@Android:style/Theme.Dialog"
Android:windowSoftInputMode="adjustResize"
Android:excludeFromRecents="true"
Edit: Pour terminer les activités en même temps, utilisez ce qui suit quelque part dans votre DialogActivity (exemple: remplacez le bouton de retour):
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(), StartActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
et dans onCreate()
de StartActivity:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
else {
Intent StartApp = new Intent(this, TestActivity.class);
startActivity(StartApp);
}
Captures d'écran!
Normal
Cliquez sur la case EditText
Après défilement vers le bas (ps: j'ai mis la zone de texte à l'intérieur de scrollview c'est pourquoi c'est parti;))
J'espère que cela vous aidera;)
Hé, pouvez-vous essayer d'ajouter ceci
Android:isScrollContainer="false"
dans votre ScrollView. Il a résolu mon problème une fois. Ça pourrait vous aider aussi.
Ajoutez également ceci à votre activité dans manifest.xml
Android:windowSoftInputMode="adjustPan"
J'espère que cela aide..!! :)
J'ai eu le même problème.
Ajoutez votre arrière-plan de mise en page externe à l'intérieur de la méthode onCreate comme indiqué ci-dessous
getWindow().setBackgroundDrawableResource(R.drawable.login_bg);
et ajoutez votre disposition extérieure comme
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/activity_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
>
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#4d000000"
><other code></ScrollView></RelativeLayout>
Ajouter Android:layout_weight="1"
pour la mise en page externe et ne définissez pas l'arrière-plan dans le fichier xml Je pense que cela aide quelqu'un
Vous devez déplacer le Android:background="@drawable/background"
dans un ImageView
au-dessus de ScrollView
. Lorsque le clavier apparaît, il réduit efficacement l'écran et, ayant une image en arrière-plan, vous n'avez aucun contrôle sur la façon dont il est redimensionné/rogné. Donc, en supposant que vous souhaitiez que l'image soit pleine largeur mais que vous gardiez le rapport d'aspect, essayez ceci:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:facebook="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:src="@drawable/background"
Android:scaleType="centerCrop" />
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
/**
Other stuff
*/
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Vous pouvez essayer différents Android:scaleType
valeurs pour obtenir l'effet souhaité. Si vous souhaitez que l'image soit recadrée du haut au lieu du recadrage moyen par défaut, consultez ici sur la façon d'y parvenir, ou essayez d'utiliser la bibliothèque this
Vérifiez cette réponse , l'astuce de base est que vous ne définissez pas l'arrière-plan sur la mise en page mais sur la fenêtre. Cela peut être fait à partir de l'activité avec getWindow().setBackgroundDrawable()
, ou vous pouvez le définir dans un thème pour votre activité.
Utilisez ScrollView comme parent supérieur. Il défilera automatiquement de haut en bas lorsque vous ouvrirez et fermerez le clavier.
Au lieu de Android:windowSoftInputMode="stateVisible|adjustPan"
, vous devez passer à Android:windowSoftInputMode="stateVisible|adjustResize"
. Ça a marché pour moi.
Pourquoi tu n'aimes pas ça
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:fillViewport="true"
Android:focusable="true"
Android:background="@drawable/background"
Android:focusableInTouchMode="true">
<RelativeLayout
Android:id="@+id/relative"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:focusable="true"
Android:focusableInTouchMode="true"
/**
Other stuff
*/
>
</RelativeLayout>
</ScrollView>