Deshabilitar el desplazamiento de una vista de lista contenida dentro de una vista de desplazamiento
Quiero mostrar una pantalla de Perfil para mis usuarios.
Debe tener tres vistas (2 Buttons
y a ImageView
) y a ListView
para mostrar el contenido realizado por ese usuario.
Sin embargo, no quiero que el ListView
se desplace. En cambio, quiero que sea tan grande como sea necesario, y poner todas mis vistas dentro de un ScrollView
, para que las tres primeras vistas se desplacen con el ListView
. Esto, por supuesto, no funciona como estaba previsto.
Todos mis tres elementos están dentro de un LinearLayout
. Pensé en hacer de ellos el primer elemento en el ListView
, pero esto lleva a que sean seleccionables como el primer elemento, y tengan que hacer alguna codificación innecesaria.
¿Hay alguna manera de hacer esto de la manera fácil o tendré que seguir haciendo que el Diseño sea el primer elemento en mi ListView?
7 answers
Agregarlos a la vista de lista como primer elemento parece una solución bastante buena.
Para que la vista no sea seleccionable, simplemente obtenga la vista y .setClickable(false)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-31 10:20:07
Encontré una solución muy simple para esto. Simplemente obtenga el adaptador de listview y calcule su tamaño cuando se muestren todos los elementos. La ventaja es que esta solución también funciona dentro de un ScrollView.
Ejemplo:
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();
}
Llama a esta función pasando sobre tu objeto ListView:
justifyListViewHeightBasedOnChildren(myListview);
La función mostrada arriba es una modidicación de un post en: Desactivar el desplazamiento en listview
Tenga en cuenta que debe llamar a esta función después de haber configurado el adaptador listview. Si el tamaño de las entradas en el adaptador ha cambiado, también necesita llamar a esta función.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:42
Usted puede hacer esto por
listView.setScrollContainer(false);
Para más información, consulte
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:30
Añadiría un View
con fondo invisible encima de ListView
. Pon a View.OnTouchListener()
. Y consume el evento devolviendo true
en el método onTouch()
de View.OnTouchListener()
.
Cuando desee que la lista se desplace de nuevo, elimine el oyente táctil establecido en el transparente View
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-18 12:54:32
Si tiene que mostrar un número limitado de elementos en la vista de lista y desea evitar que la vista de lista se desplace, debe mantener la altura de la vista de lista mayor que la altura total de los elementos.
Por ejemplo, desea mostrar 3 elementos. (la altura de la fila es 30). entonces la altura total de los artículos se convierte 3 x 30dp = 90dp,
Así que ahora tienes que establecer la altura de listview mayor que 90. por ejemplo: 100dp. así que ahora su listview no se desplazará en ningún caso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-07 12:29:01
Creo que la mejor manera sería poner los 2 botones y la vista de imagen en un LinearLayout (o cualquier diseño que se adapte a su necesidad) y agregar este diseño como el encabezado de la lista utilizando el método addHeaderView:
Http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-31 23:37:44
Con la siguiente instrucción:
name_lista.getLayoutParams (). height = new_size
New_size es una variable que calcularás en función del número de elementos de tu lista, por ejemplo:
new_size = 100 * list_size;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 18:09:38