2015-10-07 88 views
2

我有我的GridView的问题。它不是滚动到GridView的底部。我使用了Android developer网站的GridView。下面是当我向下滚动时,屏幕底部的样子: 因此,它将切断最后两个网格的底部。不过我已经将填充添加到我的GridView的底部,看起来像这样解决了这个:GridView不能滚动到底部探测

<?xml version="1.0" encoding="utf-8"?> 
<GridView 
    android:id="@+id/gridview" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="90dp" 
    android:gravity="center" 
    android:horizontalSpacing="2dp" 
    android:numColumns="2" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="1dp" 
    android:paddingBottom="55dp" 
    /> 

的问题是55dp的填充完全符合我的三星Galaxy S5。但我怀疑这不是其他设备的情况?如果我添加更多的填充,我将在屏幕底部获得永久的白线,即使GridView没有完全滚动。

这里是我实现的GridView类:

public class HomeFragment extends Fragment implements AdapterView.OnItemClickListener { 

    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.grid_layout, container, false); 
     GridView gridview = (GridView) view.findViewById(R.id.gridview); 
     gridview.setAdapter(new GridViewAdapter(getActivity())); 
     gridview.setOnItemClickListener(this); 
     // Inflate the layout for this fragment 
     return view; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getContext(), "" + position, 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

这是我GridViewAdapter类:

public class GridViewAdapter extends BaseAdapter { 
    private Context mContext; 

    public GridViewAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
     int screenWidth = metrics.widthPixels; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(screenWidth/2, screenWidth/2)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      //imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.dog, R.drawable.cat, 
      R.drawable.horse, R.drawable.bunny, 
      R.drawable.fish, R.drawable.hamster, 
      R.drawable.hedgehog, R.drawable.bird 
    }; 
} 

所以我在短的问题是:有没有一种方法,以确保在GridView会无需将填充添加到GridView底部即可完美地适应屏幕,我认为这对所有设备来说都不是相同的填充?

回答

0

如果使用高于20的SDK,您可以使用

int yourNavigationBarHeight; 
Resources resources = context.getResources(); 
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); 
if(resourceId > 0) 
    yourNavigationBarHeight = resources.getDimensionPixelSize(resourceId); 
else 
    yourNavigationBarHeight = 0;