Необходимо создать нижний колонтитул для Gridview в Android - PullRequest
5 голосов
/ 16 января 2012

Смотри макет ниже. Я не могу поместить кнопку нижнего колонтитула ниже GridView. Любая помощь будет признательна.

При заполнении экрана Gridview кнопка не отображается.

<?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>

Ответы [ 7 ]

9 голосов
/ 30 октября 2014

Я долго искал GridView, который позволяет нам addFooterView и addHeaderView как ListView.

Это сообщение 2 года назад.Я пришел сюда, перейдя по ссылке в результатах поиска Google.Я не знаю, была ли эта проблема решена или нет.

Если нет, вот библиотека, которая может быть полезна.https://github.com/liaohuqiu/android-GridViewWithHeaderAndFooter.

Это очень просто:

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);

Вот снимок экрана:

Screen Shot

Надеюсь, это будет полезно.Удачи!

4 голосов
/ 16 января 2012
<?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>  

отлично работает у меня

1 голос
/ 27 августа 2017

Добавьте в GridView два атрибута:

  • android: paddingBottom размера как ваша кнопка;
  • android: clipToPadding = "false"

Это освободит место для кнопки внизу сетки.

1 голос
/ 21 января 2012

Мне удалось добавить нижний колонтитул в мой gridview с небольшим фокусом.Допустим, ваши основные данные адаптеров - это список объектов списка MyDataInfo, теперь, когда вы передали все данные в адаптер, вы можете добавить два пустых ( null ) объекта и проверить в getView, являются ли данные нулевыми или нет, и накачать нужное значение.view.

// 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;
    }

}

Перед этим в вашем основном занятии, где вы устанавливаете адаптер, у вас будет что-то вроде этого

YourAdapter adap = new YourAdapter(this, dataList);
gridView.setAdapter(adap);
YourInfo info = null;
adapter.addVoid(info);

И важная вещь, которую вы будетепридется обрабатывать 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;
    }

Надеюсь, это поможет ^^

0 голосов
/ 16 января 2012

Используйте так же, как показано ниже:

Отредактировано:

<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>

и вызов метода onScroll, чтобы скрыть то, что вы хотите ............ эта реализация для функции LOAD MORE в GridView ............. Это работает для я.

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);
                    }
                }
            }
        });
0 голосов
/ 16 января 2012

проверьте, помогает ли это

<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" />
0 голосов
/ 16 января 2012

Попробуйте сначала добавить кнопку и поместить поверх нее вид сетки. Как-то так должно работать:

<?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>

EDIT

Судя по вашим комментариям, я понимаю, почему выше не работает. Предполагая, что вы хотите, чтобы кнопка появлялась только после прокрутки вниз (а не на экране все время), я рекомендую макет:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...