Haga que el último elemento / ViewHolder en RecyclerView llene el resto de la pantalla o tenga una altura mínima

Estoy luchando con el RecyclerView. Utilizo una vista de reciclador para mostrar los detalles de mi clase de modelo.

//My model class MyModel { String name; Double latitude; Double longitude; Boolean isOnline; ... } 

Dado que algunos de los valores pueden no estar presentes, uso el RecyclerView con tipos de vista personalizada (uno que representa cada valor de mi modelo).

 //Inside my custom adapter public void setModel(T model) { //Reset values itemCount = 0; deviceOfflineViewPosition = -1; mapViewPosition = -1; //If device is offline, add device offline item if (device.isOnline() == null || !device.isOnline()) { deviceOfflineViewPosition = itemCount; itemCount++; } //Add additional items if necessary ... //Always add the map as the last item mapViewPosition = itemCount; itemCount++; notifyDataSetChanged(); } @Override public int getItemViewType(int position) { if (position == deviceOfflineViewPosition) { return ITEM_VIEW_TYPE_OFFLINE; } else if (position == mapViewPosition) { return ITEM_VIEW_TYPE_MAP; } else if (...) { //Check for other view types } } 

Con el RecyclerView puedo determinar fácilmente en tiempo de ejecución qué valores están disponibles y agregar los elementos correspondientes al origen de datos RecyclerView. Simplemente el código, pero mi modelo tiene mucho más valores y tengo mucho más tipos de vista.

El último elemento en el RecyclerView es siempre un mapa y siempre está presente. Incluso si no hay valor en absoluto en mi modelo, habrá al menos un elemento, el mapa.

PROBLEMA: ¿Cómo puedo hacer que el último elemento de RecyclerView llene el espacio restante en la pantalla y también tenga un mínimo de altura. El tamaño debe ser lo que nunca valor es lager: el espacio restante o la altura mínima. Por ejemplo:

  • Modelo tiene unos pocos valores, que en suma tomar hasta 100dp de una pantalla de 600dp -> mapa de altura debe ser 500dp
  • Modelo tiene una gran cantidad de valores, que en suma tomar 500dp de una pantalla de 600dp -> mapa de altura debe ser un valor mínimo de 200dp
  • El modelo no tiene valores -> el mapa llena toda la pantalla

Introduzca aquí la descripción de la imagen

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.