Android Gridview最后一项不完全可见

Android Gridview最后一项不完全可见,android,gridview,Android,Gridview,我创建了一个带有一个imageview的gridview。当我滚动gridview最后一行时,项目不完全可见。这是最后两张照片不完全可见的截图 这是我的片段 package com.secretphotosandvideoslocker.fragments; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.os.E

我创建了一个带有一个imageview的gridview。当我滚动gridview最后一行时,项目不完全可见。这是最后两张照片不完全可见的截图

这是我的片段

package com.secretphotosandvideoslocker.fragments;

import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;

import com.secretphotosandvideoslocker.R;
import com.secretphotosandvideoslocker.adapters.PhotoAlumbAdapter;
import com.secretphotosandvideoslocker.interfaces.AllImagePath;
import com.secretphotosandvideoslocker.interfaces.SupportInterface;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class PhotoFragment extends Fragment implements AllImagePath {

    private View myView;
    private GridView gridView;
    private int size;
    private PhotoAlumbAdapter adapter;
    private List<String> list = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.fragment_photo, null);
        new SupportInterface(this);
        gridView = (GridView) myView.findViewById(R.id.photo_grid);
        int value = getActivity().getResources().getConfiguration().orientation;
        orientationBasedUI(value);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            }
        });
        return myView;

    }

    private void orientationBasedUI(int orientation) {
        list = new ArrayList<>();
        WindowManager windowManager = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(metrics);
        size = orientation == Configuration.ORIENTATION_PORTRAIT ? metrics.widthPixels / 3 : metrics.widthPixels / 5;
        gridView.setNumColumns(orientation == Configuration.ORIENTATION_PORTRAIT ? 3 : 5);
        File file = new File(Environment.getExternalStorageDirectory()
                .getAbsolutePath() + "/Android/data/com.secretphotosandvideoslocker/Images");
        File[] files = file.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++)
                list.add(files[i].getAbsolutePath());
            adapter = new PhotoAlumbAdapter(list, getActivity(), size);
        }
        gridView.setAdapter(adapter);
    }

    @Override
    public void setAllImage() {
        int value = getActivity().getResources().getConfiguration().orientation;
        orientationBasedUI(value);
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <GridView
        android:id="@+id/photo_grid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="1dp"
        android:paddingLeft="1dp"
        android:paddingRight="1dp"
        android:paddingTop="1dp"
        android:stretchMode="columnWidth" />
</RelativeLayout>
package com.secretphotosandsvideoslocker.fragments;
导入android.content.Context;
导入android.content.res.Configuration;
导入android.os.Bundle;
导入android.os.Environment;
导入android.support.v4.app.Fragment;
导入android.util.DisplayMetrics;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.WindowManager;
导入android.widget.AdapterView;
导入android.widget.GridView;
导入com.secretphotosandsvideoslocker.R;
导入com.secretphotosandsvideoslocker.adapters.photoalumdapter;
导入com.secretphotosandsvideoslocker.interfaces.AllImagePath;
导入com.secretphotosandsvideoslocker.interfaces.SupportInterface;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
公共类PhotoFragment扩展片段实现AllImagePath{
私有视图myView;
私有GridView GridView;
私有整数大小;
专用光电适配器;
私有列表=空;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
myView=充气机。充气(R.layout.fragment_photo,空);
新的SupportInterface(本);
gridView=(gridView)myView.findViewById(R.id.photo_grid);
int value=getActivity().getResources().getConfiguration().orientation;
方向基dui(值);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
}
});
返回myView;
}
专用void方向basedui(内部方向){
列表=新的ArrayList();
WindowManager WindowManager=(WindowManager)getActivity().getSystemService(Context.WINDOW\u服务);
DisplayMetrics=新的DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(度量);
大小=方向==配置.orientation\u纵向?metrics.widthPixels/3:metrics.widthPixels/5;
gridView.setNumColumns(方向==Configuration.orientation\u纵向?3:5);
File File=新文件(Environment.getExternalStorageDirectory()
.getAbsolutePath()+“/Android/data/com.secretphotosandsvideoslocker/Images”);
File[]files=File.listFiles();
如果(文件!=null){
对于(int i=0;i
下面是这个片段中使用的xml

package com.secretphotosandvideoslocker.fragments;

import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;

import com.secretphotosandvideoslocker.R;
import com.secretphotosandvideoslocker.adapters.PhotoAlumbAdapter;
import com.secretphotosandvideoslocker.interfaces.AllImagePath;
import com.secretphotosandvideoslocker.interfaces.SupportInterface;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class PhotoFragment extends Fragment implements AllImagePath {

    private View myView;
    private GridView gridView;
    private int size;
    private PhotoAlumbAdapter adapter;
    private List<String> list = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.fragment_photo, null);
        new SupportInterface(this);
        gridView = (GridView) myView.findViewById(R.id.photo_grid);
        int value = getActivity().getResources().getConfiguration().orientation;
        orientationBasedUI(value);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            }
        });
        return myView;

    }

    private void orientationBasedUI(int orientation) {
        list = new ArrayList<>();
        WindowManager windowManager = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(metrics);
        size = orientation == Configuration.ORIENTATION_PORTRAIT ? metrics.widthPixels / 3 : metrics.widthPixels / 5;
        gridView.setNumColumns(orientation == Configuration.ORIENTATION_PORTRAIT ? 3 : 5);
        File file = new File(Environment.getExternalStorageDirectory()
                .getAbsolutePath() + "/Android/data/com.secretphotosandvideoslocker/Images");
        File[] files = file.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++)
                list.add(files[i].getAbsolutePath());
            adapter = new PhotoAlumbAdapter(list, getActivity(), size);
        }
        gridView.setAdapter(adapter);
    }

    @Override
    public void setAllImage() {
        int value = getActivity().getResources().getConfiguration().orientation;
        orientationBasedUI(value);
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <GridView
        android:id="@+id/photo_grid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="1dp"
        android:paddingLeft="1dp"
        android:paddingRight="1dp"
        android:paddingTop="1dp"
        android:stretchMode="columnWidth" />
</RelativeLayout>

这是此gridview的适配器

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.secretphotosandvideoslocker.R;

import java.util.List;



public class PhotoAlumbAdapter extends BaseAdapter {
    private View myView;
    private LayoutInflater layoutInflater;
    private List<String> list;
    private Context context;
    private ImageLoader imageLoader;
    private int size;
    private DisplayImageOptions imageOptions;

    public PhotoAlumbAdapter(List<String> list, Context context, int size) {
        this.list = list;
        this.size = size;
        this.context = context;
        layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = ImageLoader.getInstance();
        imageLoader.init(ImageLoaderConfiguration.createDefault(context));
        imageOptions = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.image_placeholder)
                .cacheOnDisk(true).build();
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View V, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        myView = V;
        if (V == null) {
            viewHolder = new ViewHolder();
            myView = layoutInflater.inflate(R.layout.photo_grid_item, null);
            viewHolder.imageView = (ImageView) myView.findViewById(R.id.image_view);
            myView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) myView.getTag();
        }
        viewHolder.imageView.getLayoutParams().width = size;
        viewHolder.imageView.getLayoutParams().height = size;
        imageLoader.displayImage("file://" + list.get(position), viewHolder.imageView, imageOptions);
        return myView;
    }

    private class ViewHolder {
        ImageView imageView;
    }
}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入com.nostra13.universalimageloader.core.DisplayImageOptions;
导入com.nostra13.universalimageloader.core.ImageLoader;
导入com.nostra13.universialimageloader.core.imageloader配置;
导入com.secretphotosandsvideoslocker.R;
导入java.util.List;
公共类PhotoAlumAdapter扩展BaseAdapter{
私有视图myView;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人名单;
私人语境;
私有图像加载器;
私有整数大小;
私有显示图像选项图像选项;
公共PhotoalumAdapter(列表、上下文、整数大小){
this.list=列表;
这个。大小=大小;
this.context=上下文;
layoutInflater=(layoutInflater)this.context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
imageLoader=imageLoader.getInstance();
init(ImageLoaderConfiguration.createDefault(上下文));
imageOptions=new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.image\u占位符)
.cacheOnDisk(true).build();
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int i){
返回列表。获取(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(内部位置、视图V、视图组视图组){
持票人持票人;
myView=V;
如果(V==null){
viewHolder=新的viewHolder();
myView=layoutInflater.flate(R.layout.photo\u grid\u项,空);
viewHolder.imageView=(imageView)myView.findViewById(R.id.image\u视图);
myView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)myView.getTag();
}
viewHolder.imageView.getLayoutParams().width=大小;
viewHolder.imageView.getLayoutParams().height=大小;
imageLoader.displayImage(“文件:/”+list.get(位置)、viewHolder.imageView、imageOptions);
返回myView;
}
私有类视窗持有者{
图像视图图像视图;
}
}

尝试更改gridview高度以包裹内容,为相对布局添加填充。安卓:paddingBottom=15dpI已经尝试过@AnjaliThis并不是一个完美的解决方案@AbhayBohra@SANJAYGUPTA设置为scrollToPosition到列表的最后一项尝试更改gridview高度以换行内容为相对布局添加填充。安卓:paddingBottom=15dpI已经尝试过@AnjaliThis并不是一个完美的解决方案@AbhayBohra@SANJAYGUPTA着手