2015-10-07 2 views
2

У меня проблема с моим GridView. Он не прокручивается до нижней части GridView proberly. Я использовал GridView с сайта Android developer. Вот как выглядит нижняя часть моего экрана, когда я прокручиваю весь путь вниз: Так что он отсекает нижнюю часть последних двух сеток. Однако я решил эту проблему путем добавления отступов в нижней части моего 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 идеально подходит к моему Samsung 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

Если вы используете SDK выше, чем 20, вы можете использовать

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; 
Смежные вопросы