2012-01-16 6 views
4

См. Ниже расположение. Я не могу поставить кнопку нижнего колонтитула ниже GridView. Любая помощь будет оценена.Необходимо создать нижний колонтитул для Gridview в Android

Когда 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> 
+0

Похожие записи: http://stackoverflow.com/questions/3670176/getting-a-button-to-scroll-into-view-at-the-bottom-of-a-gridview-on-android –

+0

Вы должен закрыть ваш GridView после такой кнопки и, конечно же, убрать /> из

+0

может быть полезен для таких читателей, как я! ссылка: http://stackoverflow.com/a/24436309 – johnshumon

ответ

0

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

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

его по ошибке добавьте меня. см. обновленный код. и я хочу кнопку после gridview, как нижний колонтитул listview. –

+0

@DhavalKhant - Вы попробовали макет, который я разместил? Он должен поместить кнопку после сетки в нижней части. –

+0

Я попробовал свой код, но его не то, что я хочу. –

-6

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

<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

Как насчет GridView? –

0

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

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

<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

Его нет в списке. –

+0

Извините, Дхавал, см. Мой обновленный ответ, его уверенность в работе ........ –

+0

Извините, но его nt работает для меня. , –

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

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

+0

NOt listview Я хочу нижний колонтитул после элемента gridview. –

+0

О, извините, забыл изменить, но он работает как для списка, так и для сетки. Проверить обновленный Код –

+0

thats not i want –

1

мне удалось добавить колонтитул к моему GridView с небольшим трюком. Допустим, что ваши основные данные ваших адаптеров: Список списка объектов MyDataInfo, теперь, когда вы передали все данные на адаптер, вы можете добавить два пустых объекта (10 null) и проверить в getView, являются ли данные нулевыми или нет, и раздуйте нужный вид.

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

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

9

Я долгое время искал 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

Надеется, что это было бы полезно. Удачи!

0

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

  • андроида: paddingBottom размера, как ваш Button;
  • андроид: clipToPadding = «ложь»

Это позволит сделать некоторое пространство для кнопки в нижней части сетки.

Смежные вопросы