Necesita crear pie de página para Gridview en Android
Vea abajo la disposición. No puedo poner el botón de pie debajo de un GridView
. Cualquier ayuda será apreciada.
Cuando Gridview llene el botón de pantalla no se muestra.
- Cómo dividir tres columnas utilizando el diseño lineal en Android
- Cómo obtener una vista previa de Custom Font Android Studio (con caligrafía)
- Cómo agregar dos listview en scrollview
- Adición de forma a LinearLayout Android
- ¿Cómo recuperar las dimensiones de una vista?
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/gridview" android:text="Load More Images" /> </RelativeLayout>
- ¿Cómo mostrar un TextView debajo de otro en Android con archivos XML?
- Escribir un archivo en almacenamiento externo en Android
- Android cómo hacer que resalte la vista cuando se hace clic?
- El hijo de RelativeLayout no rellena la altura de RelativeLayout
- ¿Cómo lograr llevar a un niño frente a otro en el grupo de vista personalizado?
- Cómo compilar y ejecutar Google Contacts App en Android Emulator
- ¿Cuál es la diferencia entre 'textEmailAddress' y 'textWebEmailAddress'
- Diferencia entre R.layout y android.R.layout
He estado manteniendo la búsqueda durante mucho tiempo para un GridView que nos permite addFooterView
y addHeaderView
como ListView
.
Es un post hace 2 años. Vengo aquí siguiendo el enlace en el resultado de búsqueda de Google. No sé si este problema ha sido resuelto o no.
Si no, aquí hay una biblioteca que puede ser útil. https://github.com/liaohuqiu/android-GridViewWithHeaderAndFooter .
Es muy sencillo:
GridViewWithHeaderAndFooter gridView = (GridViewWithHeaderAndFooter) v.findViewById(R.id.ly_image_list_grid); LayoutInflater layoutInflater = LayoutInflater.from(this); View headerView = layoutInflater.inflate(R.layout.test_header_view, null); View footerView = layoutInflater.inflate(R.layout.test_footer_view, null); gridView.addHeaderView(headerView); gridView.addFooterView(footerView);
Aquí hay una instantánea de pantalla:
Espero que esto sea útil. ¡Buena suerte!
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" > <GridView android:layout_height="match_parent" android:id="@+id/all_workouts_list" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" android:cacheColorHint="#ffffffff" android:layout_width="match_parent" android:layout_above="@+id/add_workout_all_workout_list"></GridView> <Button android:layout_width="wrap_content" android:id="@+id/add_workout_all_workout_list" android:layout_height="wrap_content" android:text="Add Workout" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true"></Button> </RelativeLayout>
Funciona bien para mi
Me las arreglé para añadir pie de página a mi gridview con un pequeño truco. Digamos que los datos principales de los adaptadores son Lista de objetos MyDataInfo, ahora cuando pasó todos los datos al adaptador, puede agregar dos objetos vacíos ( nulos ) y comprobar en getView si los datos son nulos o no e inflar la vista deseada.
// in the adapter public void addVoid(YourInfo info) { dataList.add(info); dataList.add(info); notifyDataSetChanged(); } public View getView(int position, View convertView, ViewGroup parent) { if (dataList.get(position) !=null) { View vi = convertView; ViewHolder holder; if (convertView == null || convertView.getTag().equals("stop")) { //inflate your gridview item } else { holder = (ViewHolder) vi.getTag(); } // provide data to views return vi; } else { View v; if (position == dataList.size() - 2) { v = inflater.inflate(R.layout.show_more, null); // load more view v.setTag("stop"); } else { v = inflater.inflate(R.layout.progress_bar, null); // progress bar v.setTag("stop"); } return v; }
}
Antes de esto en su actividad principal donde se establece el adaptador tendrá algo como esto
YourAdapter adap = new YourAdapter(this, dataList); gridView.setAdapter(adap); YourInfo info = null; adapter.addVoid(info);
Y lo importante que tendrás que manejar onitemclick
int size = adapter.getCount(); public void onItemClick(AdapterView<?> parent,View view, int position, long id) { if (position == size - 2) { // user selected SHOW MORE view int wantedPosition = size - 1; int firstPosition = grid.getFirstVisiblePosition(); int wantedChild = wantedPosition- firstPosition; ProgressBar progBar = grid.getChildAt(wantedChild); progBar.setVisibility(View.Visible); return; } if (position == size - 1) // user selected progress bar return; }
Espero que esto ayude ^ ^
Utilice lo mismo que el siguiente:
Editado:
<FrameLayout android:id="@+id/linear_Layout_List" android:layout_gravity="center_horizontal|top|bottom" android:layout_marginTop="90dip" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="60dip" android:background="#E4E4E4"> <GridView android:layout_width="fill_parent" android:layout_gravity="center_horizontal|top|bottom" android:columnWidth="90dp" android:numColumns="3" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" android:id="@+id/Search_Result_Grid" android:background="#E4E4E4" android:focusable="true" android:verticalSpacing="10dp" android:layout_height="wrap_content" android:layout_marginBottom="45dip"> </GridView> <Button android:id="@+id/txt_LoadMoreGrid" android:layout_width="fill_parent" android:layout_gravity="center_horizontal|bottom" android:layout_height="wrap_content" android:text="Load More...." android:clickable="true" android:textColor="#ffffff" android:visibility="invisible" android:background="@drawable/top_bar_bg"></Button> </FrameLayout>
Y Llame al método onScroll para ocultar lo mismo que desea ……….. esta implementación para la funcionalidad LOAD MORE en GridView …………. Funciona para mí.
grid.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { System.out.println("The first visible Item:"+firstVisibleItem); if(width<=320 && height<=480) { if(firstVisibleItem+5==totalItemCount-1) { /*FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT,Gravity.NO_GRAVITY); layoutParams.setMargins(0, 0, 0, 45); grid.setLayoutParams(layoutParams);*/ tv_Load.setVisibility(tv_Load.VISIBLE); } else { /* FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT,Gravity.NO_GRAVITY); layoutParams.setMargins(0, 0, 0, 0); grid.setLayoutParams(layoutParams);*/ tv_Load.setVisibility(tv_Load.GONE); } } else { if(firstVisibleItem+8==totalItemCount-1) { /*FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT,Gravity.NO_GRAVITY); layoutParams.setMargins(0, 0, 0, 45); grid.setLayoutParams(layoutParams);*/ tv_Load.setVisibility(tv_Load.VISIBLE); } else { /* FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT,Gravity.NO_GRAVITY); layoutParams.setMargins(0, 0, 0, 0); grid.setLayoutParams(layoutParams);*/ tv_Load.setVisibility(tv_Load.GONE); } } } });
Intente agregar el botón primero y poner la vista de cuadrícula en la parte superior de la misma. Algo así debería funcionar:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Load More Images" /> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/button1" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> </RelativeLayout>
EDITAR
Sobre la base de sus comentarios, puedo ver por qué lo anterior no funciona. Suponiendo que quiere decir que desea que el botón aparezca sólo después de desplazarse a la parte inferior (y no estar en la pantalla todo el tiempo), he aquí el diseño que recomiendo:
<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="wrap_content" android:orientation="vertical" > <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Load More Images" /> </LinearLayout> </ScrollView>
Agregue a GridView dos atributos:
- Android: paddingBottom del tamaño como su botón;
- Android: clipToPadding = "false"
Esto hará que haya espacio para el botón en la parte inferior de la cuadrícula.
Comprobar si esto ayuda
<Button android:id="@+id/button1" style="@android:style/ButtonBar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:text="Load More Images" />
- Antialiasing de lienzo con aceleración de hardware (Android API 11 y posterior)
- Android: hilo de fondo