J'ai une "page" qui contient un certain nombre de composants et dont le contenu est plus long que la hauteur de l'appareil. Très bien, il suffit de placer l'ensemble de la mise en page (la page entière) à l'intérieur d'un fichier de type ScrollView
pas de problème.
L'un des composants est un ViewPager
. Le rendu est correct, mais la réponse à un glissement ou à une poussée ne fonctionne pas correctement, elle est instable et ne fonctionne pas toujours. Il semble qu'il y ait une confusion avec la fonction ScrollView
Ainsi, le système ne fonctionne à 100 % que si vous lancez le ballon sur une ligne horizontale exacte.
Si je retire le ScrollView
le ViewPager répond parfaitement.
J'ai fait des recherches et je n'ai pas trouvé ce défaut connu. Quelqu'un d'autre a-t-il rencontré ce problème ?
- Version de la plate-forme : 1.6
- Bibliothèque de compatibilité v4.
- Appareil : HTC Incredible S
Vous trouverez ci-dessous un exemple de code à tester, à commenter. ScrollView
pour voir qu'il fonctionne correctement.
Activité :
package com.ss.activities;
import com.ss.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;
public class PagerInsideScollViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
vp.setAdapter(new MyPagerAdapter(this));
}
}
class MyPagerAdapter extends PagerAdapter {
private Context ctx;
public MyPagerAdapter(Context context) {
ctx = context;
}
@Override
public int getCount() {
return 2;
}
@Override
public Object instantiateItem(View collection, int position) {
TextView tv = new TextView(ctx);
tv.setTextSize(50);
tv.setTextColor(Color.WHITE);
tv.setText("SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE");
((ViewPager) collection).addView(tv);
return tv;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public void startUpdate(View arg0) {
}
@Override
public void finishUpdate(View arg0) {
}
}
Mise en page :
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="300dp" />
</LinearLayout>
</ScrollView>