Je souhaite afficher un écran de profil pour mes utilisateurs.
Il doit avoir trois vues (2 Buttons
et une ImageView
) et une ListView
pour afficher le contenu créé par cet utilisateur.
Cependant, je ne veux pas que la ListView
défile. Au lieu de cela, je veux qu’elle soit aussi grande que nécessaire et que toutes mes vues soient dans une ScrollView
, afin que les trois premières vues défilent avec la ListView
. Ceci, bien sûr, ne fonctionne pas comme prévu.
Tous mes trois articles sont à l'intérieur d'une LinearLayout
. J'ai pensé en faire le premier élément de la ListView
, mais cela les amène à être sélectionnables en tant que premier élément et à devoir coder inutilement.
Y a-t-il un moyen de le faire facilement ou devrais-je m'en tenir à faire de la mise en page le premier élément de mon ListView?
Les ajouter à ListView en tant que premier élément semble être une très bonne solution.
Pour rendre la vue non sélectionnable, il suffit d’obtenir la vue et la fonction .setClickable(false)
.
J'ai trouvé une solution très simple pour cela. Procurez-vous simplement l'adaptateur de la liste et calculez sa taille lorsque tous les éléments sont affichés ..__ L'avantage est que cette solution fonctionne également à l'intérieur d'une ScrollView.
Exemple:
public static void justifyListViewHeightBasedOnChildren (ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
ViewGroup vg = listView;
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, vg);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}
Appelez cette fonction en passant sur votre objet ListView:
justifyListViewHeightBasedOnChildren(myListview);
La fonction indiquée ci-dessus est une modidication d’une publication dans: Désactiver le défilement dans ListView
Veuillez noter que vous devez appeler cette fonction après avoir configuré l'adaptateur pour la liste. Si la taille des entrées de l'adaptateur a changé, vous devez également appeler cette fonction.
Vous pouvez le faire en
listView.setScrollContainer(false);
pour plus s'il vous plaît vérifier
J'ajouterais un View
avec un fond invisible au-dessus de ListView
. Définissez une View.OnTouchListener()
pour cela. Et utilisez l'événement en renvoyant true
dans onTouch()
, méthode de View.OnTouchListener()
.
Lorsque vous souhaitez que la liste défile de nouveau, supprimez le programme d'écoute tactile défini sur le transparent View
.
si vous devez afficher un nombre limité d'éléments dans la vue liste et que vous souhaitez empêcher le défilement de la vue liste, vous devez conserver une hauteur de vue vue supérieure à la hauteur totale des éléments.
par exemple, vous souhaitez afficher 3 éléments. (la hauteur de la rangée est 30). alors la hauteur totale des articles devient 3 x 30dp = 90dp,
alors maintenant, vous devez définir une hauteur de liste supérieure à 90. Par exemple: 100dp. alors maintenant, votre listview ne défilera en aucun cas.
Je pense que le meilleur moyen serait de placer les 2 boutons et la vue d'image dans un LinearLayout (ou toute disposition qui correspond à vos besoins) et d'ajouter cette disposition comme en-tête de liste à l'aide de la méthode addHeaderView:
http://developer.Android.com/reference/Android/widget/ListView.html#addHeaderView(Android.view.View )
avec l'instruction suivante:
name_lista.getLayoutParams (). height = new_size
new_size est une variable que vous calculerez en fonction du nombre d'éléments de votre liste, par exemple:
new_size = 100 * list_size;