1

좌표계 셀이 셀 크기보다 절반 인 RecyclerView 및 GridLayoutManager를 사용하여 체스 보드 구성 요소를 거의 관리했습니다. 하지만 왜 왼쪽 좌표 영역과 첫 번째 셀 열 ("a"열) 사이에 수직 간격이 있는지 알 수 없습니다.내 구성 요소의 공간 버그

RecyclerViewTest

그 이유는 내가 글라이드 같은 라이브러리를 사용하여 작업 할 수 있도록 이미지 뷰와 같은 세포를 관리하는 것입니다.

MainActivity.java :

package com.loloof64.recycler_view_test; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

activity_main.xml 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.loloof64.recycler_view_test.MainActivity"> 

    <com.loloof64.recycler_view_test.BoardComponent 
     android:layout_centerInParent="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 

BoardComponent.java :

package com.loloof64.recycler_view_test; 

import android.content.Context; 
import android.support.annotation.Nullable; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.AttributeSet; 

public class BoardComponent extends RecyclerView { 

    public BoardComponent(Context context) { 
     super(context); 
     initialize(context); 
    } 

    public BoardComponent(Context context, @Nullable AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initialize(context); 
    } 

    public BoardComponent(Context context, @Nullable AttributeSet attrs) { 
     super(context, attrs); 
     initialize(context); 
    } 

    private void initialize(Context context){ 
     setLayoutManager(new GridLayoutManager(context, BoardComponentAdapter.ITEMS_PER_ROW)); 
     setAdapter(new BoardComponentAdapter(context)); 
    } 
} 

BoardComponentAdapter.java :

0,123,516
package com.loloof64.recycler_view_test; 

import android.content.Context; 
import android.graphics.Color; 
import android.support.v7.widget.RecyclerView; 
import android.util.TypedValue; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RelativeLayout; 

public class BoardComponentAdapter extends RecyclerView.Adapter<BoardComponentViewHolder> { 

    public final static int ITEMS_PER_ROW = 10; 
    public final static int TOTAL_ITEMS = ITEMS_PER_ROW * ITEMS_PER_ROW; 
    private final static int CELL_SIZE_DP = 20; 

    private int cellSizePx; 

    public BoardComponentAdapter(Context context){ 
     cellSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CELL_SIZE_DP, context.getResources().getDisplayMetrics()); 
    } 


    @Override 
    public BoardComponentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.board_component, parent, false); 
     return new BoardComponentViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(BoardComponentViewHolder holder, int position) { 
     int rowPosition = position/ITEMS_PER_ROW; 
     int colPosition = position % ITEMS_PER_ROW; 

     boolean isACellRow = rowPosition > 0 && rowPosition < (ITEMS_PER_ROW-1); 
     boolean isACellCol = colPosition > 0 && colPosition < (ITEMS_PER_ROW-1); 

     if (isACellCol && isACellRow){ 
      int color = (rowPosition+colPosition) % 2 == 0 ? Color.rgb(255,180, 35) : Color.rgb(128,41,21); 
      holder.imageView.setBackgroundColor(color); 
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(cellSizePx, cellSizePx); 
      holder.imageView.setLayoutParams(layoutParams); 
     } 
     else { 
      int cellWidth = isACellCol ? cellSizePx : cellSizePx/2; 
      int cellHeight = isACellRow ? cellSizePx : cellSizePx/2; 
       holder.imageView.setBackgroundColor(Color.rgb(191,96,123)); 
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(cellWidth, cellHeight); 
      holder.imageView.setLayoutParams(layoutParams); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return TOTAL_ITEMS; 
    } 
} 

BoardComponentViewHolder.java

package com.loloof64.recycler_view_test; 

import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.ImageView; 

public class BoardComponentViewHolder extends RecyclerView.ViewHolder  { 

    public ImageView imageView; 

    public BoardComponentViewHolder(View itemView) { 
     super(itemView); 
     imageView = (ImageView) itemView.findViewById(R.id.cell_view); 
    } 
} 

board_component.xml 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/cell_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
+0

더 나은 제안이 있습니까? 내 벌레를 어떻게 다시 시작할 지 몰랐다. – loloof64

+0

이미 제공 : 마지막 코드 스 니펫 – loloof64

답변

1

문제 : 그것은 테두리 때문에 무슨 일이 벌어지고

당신의 높이 와 폭의 절반을 복용 이 매개 변수가 절반을 얻었으므로, 반쪽은 거기에있다. 즉 GAP이 표시되지 않는 이유는 무엇입니까?

해결 방법 : 휴대 폭과의 격차 동일한 여백을 남겨 둘 수 있습니다

는 사라질 것입니다 .. !! 하지만 첫 번째 열에 대해서만 문제가 발생하면 첫 번째 열에 대해서 .. !!

코드를 사용해 보았습니다. BoardComponentAdapter.java을 변경하고 저에게 잘 작동합니다. 아래의 변경 사항을 참조하십시오.

@Override 
public void onBindViewHolder(BoardComponentViewHolder holder, int position) { 
    int rowPosition = position/ITEMS_PER_ROW; 
    int colPosition = position % ITEMS_PER_ROW; 

    boolean isACellRow = rowPosition > 0 && rowPosition < (ITEMS_PER_ROW-1); 
    boolean isACellCol = colPosition > 0 && colPosition < (ITEMS_PER_ROW-1); 

    if (isACellCol && isACellRow){ 
     int color = (rowPosition+colPosition) % 2 == 0 ? Color.rgb(255,180, 35) : Color.rgb(128,41,21); 
     holder.imageView.setBackgroundColor(color); 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(cellSizePx, cellSizePx); 
     holder.imageView.setLayoutParams(layoutParams); 
    } 
    else 
    { 
     int cellWidth = isACellCol ? cellSizePx : cellSizePx/2; 
     int cellHeight = isACellRow ? cellSizePx : cellSizePx/2; 
     holder.imageView.setBackgroundColor(Color.rgb(191, 96, 123)); 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(cellWidth, cellHeight); 

     //Just Added three lines here..!! 

     if(colPosition==0) { 
      layoutParams.setMargins(cellWidth,0,0,0); 
     } 
     holder.imageView.setLayoutParams(layoutParams); 
    } 
} 
+0

을 참조하십시오. 문제가 해결되면 올바른 것으로 표시하십시오 .. !! –

+0

지연에 대해 유감 : 결과를 보려면 Android Studio 및 에뮬레이터를 시작해야했습니다. 대단히 감사합니다. 결과는 완벽합니다. – loloof64

+0

괜찮아요. 그게 도움이 되었으면 좋겠다 .. !! –