Java 如何在没有任何空间的情况下缩放活动以精确匹配图像数量

Java 如何在没有任何空间的情况下缩放活动以精确匹配图像数量,java,android,android-layout,Java,Android,Android Layout,我面临一个非常奇怪的问题。这里我一共有8张Gridview风格的图片,每张图片的大小正好是392×500。但当我运行应用程序时,最后一张图片下方总是留有一个小空间 这是我的密码 公共类BookPage扩展了AppCompative活动 实现NavigationView.OnNavigationItemSelectedListener{ int images[]={R.drawable.phy,R.drawable.chem,R.drawable.drawable\u logy,R.drawab

我面临一个非常奇怪的问题。这里我一共有8张Gridview风格的图片,每张图片的大小正好是392×500。但当我运行应用程序时,最后一张图片下方总是留有一个小空间

这是我的密码

公共类BookPage扩展了AppCompative活动
实现NavigationView.OnNavigationItemSelectedListener{
int images[]={R.drawable.phy,R.drawable.chem,R.drawable.drawable\u logy,R.drawable.drawable\u geology,R.drawable.bbs,R.drawable.drawable\u chartered,R.drawable.bachem,R.drawable.bachem};
字符串流[]={“理学硕士”、“化学硕士”、“生物学硕士”,
“地质学理学硕士”、“BBS|BBA”、“CA”、“学士”、“2理科”};
文本视图导航名称,导航电子邮件;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u books\u页面);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“पुस्तक किनबेच");
抽屉布局抽屉=(抽屉布局)findViewById(R.id.抽屉布局);
ActionBarDrawerToggle切换=新建ActionBarDrawerToggle(
这,抽屉,工具栏,R.string.navigation\u drawer\u open,R.string.navigation\u drawer\u close);
抽屉。设置抽屉定位器(开关);
toggle.syncState();
NavigationView NavigationView=(NavigationView)findViewById(R.id.nav_视图);
查看navHeaderView=navigationView.getHeaderView(0);
navName=(TextView)navHeaderView.findViewById(R.id.nav_name);
navEmail=(TextView)navHeaderView.findviewbyd(R.id.nav_-mail);
navigationView.setNavigationItemSelectedListener(此);
RecyclerView favPlaces=(RecyclerView)findViewById(R.id.favPlaces);
StaggedGridLayoutManager layoutManager=新的StaggedGridLayoutManager(2,StaggedGridLayoutManager.VERTICAL);
layoutManager.setGapStrategy(交错排列的layoutManager.GAP\u处理\u无);
favPlaces.setLayoutManager(layoutManager);
favPlaces.setHasFixedSize(真);
ArrayList placeList=getPlaces();
如果(!IsNetworkStatusAviable(此)){
Toast.makeText(这是“没有互联网!”,Toast.LENGTH_SHORT.show();
}
StaggedAdapter StaggedAdapter=新的StaggedAdapter(此,placeList);
favPlaces.设置适配器(交错适配器);
setText(PreferenceManager.getDefaultSharedReferences(this.getString(“name”,“null”)));
setText(PreferenceManager.getDefaultSharedReferences(this.getString)(“email”,“null”));
}
私有ArrayList getPlaces(){
ArrayList details=新的ArrayList();

对于(int index=0;index,下面的代码将解决此问题。但可能需要很少的编辑

在您的
片段
/
活动
onCreate
/
ocreateView
中添加以下代码。在这里,您的回收商只需使用物品装饰器即可缩放物品

 mRecycler.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(2), true));
添加创建方法
dpToPx

 /**
     * Converting dp to pixel
     */
    private int dpToPx(int dp) {
        Resources r = getResources();
        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
    }
现在为活动/片段中的
GridSpacingItemDecoration
创建一个类

 /**
     * RecyclerView item decoration - give equal margin around grid item
     */
    public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

        private int spanCount;
        private int spacing;
        private boolean includeEdge;

        GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
            this.spanCount = spanCount;
            this.spacing = spacing;
            this.includeEdge = includeEdge;
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int position = parent.getChildAdapterPosition(view); // item position
            int column = position % spanCount; // item column

            if (includeEdge) {
                outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
                outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

                if (position < spanCount) { // top edge
                    outRect.top = spacing;
                }
                outRect.bottom = spacing; // item bottom
            } else {
                outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
                outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
                if (position >= spanCount) {
                    outRect.top = spacing; // item top
                }
            }
        }
    }
/**
*RecyclerView项目装饰-在网格项目周围提供相等的裕度
*/
公共类GridSpacingItemDecoration扩展了RecyclerView.ItemDecoration{
私人帐户;
私有整数间隔;
私有布尔包含边;
GridSpacingItemDecoration(整数跨距计数、整数间距、布尔includeEdge){
this.spanCount=spanCount;
这个。间距=间距;
this.includeEdge=includeEdge;
}
@凌驾
public void getItemOffsets(Rect outRect、View View、RecyclerView父级、RecyclerView.State){
int position=parent.getChildAdapterPosition(视图);//项目位置
int column=位置%spanCount;//项目列
如果(包括边缘){
outRect.left=间距-列*间距/spanCount;//间距-列*((1f/spanCount)*间距)
outRect.right=(列+1)*间距/spanCount;/(列+1)*((1f/spanCount)*间距)
如果(位置=spanCount){
outRect.top=间距;//项目顶部
}
}
}
}

这里只需要一张图片就可以了,您可能还需要提供膨胀的xml代码+活动代码来检查问题哦,我的问题,好的,我已经编辑了我的问题。请检查。您的xml还不错。现在删除一张图片并添加您的活动代码。好了。请查看。即使在“正确”中也可以“fig,我注意到右边的项目比左边的项目高一点。这给我带来了无法解决mRecycler的错误。我应该在这里做什么?好的,解决了问题,但仍然可以看到很小的差距。但是可以考虑。”。