RecyclerView 설정 배경 그림 의 길이 와 너비 가 같 습 니 다(GridLayoutManager 를 예 로 들 면)
5215 단어 RecyclerView배경 그림
직면 한 문제:
GridLayout(Horizontal)레이아웃 을 지정 합 니 다.예 를 들 어 컨트롤 의 실제 폭 은 한 줄 에 몇 열 로 나 누 어 져 있 습 니 다.대충 말 하면... 너비=RecyclerView 너비 이 과정 은 운행 할 때 확정 되 기 때문에 길 이 는 너비 의 정확 한 값 을 미리 모 르 기 때문에 길이 와 너비 가 일치 하지 않 는 현상 을 초래 할 수 있다(그림 참조).
그림 에서 로고 의 너 비 는 GridLayout 의 모든 작은 칸 의 너비 범위 내 에서 엄 격 히 제한 되 고 길 이 는 부모 컨트롤 이 없 는 제한 하에 서 초기 값 입 니 다.
이곳 의 초기 값 은 두 가지 의미 가 있다.
① layot 레이아웃 파일 에 길이 가'xxdp'등 으로 지 정 된 값 입 니 다.
② 길이 가"wrap"로 지 정 됨content-배경 은 벡터 그림 이 고 길 이 는 drawable 파일 에서 확 정 된 android:height 입 니 다.배경 이 격자 그림 일 때 길 이 는 이 그림 해상도 의 너비 입 니 다.
이 때문에 우리 가 볼 수 있 는 실제 효 과 는 마 르 고 키 가 큰 대나무 장대 로 끌 어 올 리 는 것 이 아니 라 키 가 작고 뚱뚱 한 키 가 작은 동과 로 압축 된 것 이다.
우 리 는 당연히 디 버 깅 할 때 컨트롤 폭 을 얻어 로고 의 길 이 를 지정 할 수 있다.이렇게 디 버 깅 기계 에 서 는 확실히 길이 가 같 아 보이 지만,이것 은 정말 근본 적 인 문 제 를 해결 한 것 입 니까?
우리 의 소프트웨어 는 여러 가지 해상도 스크린 에서 운행 해 야 한다.딱딱 한 규정 의 길 이 는 반드시 일부 기종 에서 길이 와 너비 가 균형 을 잃 게 할 것 이다.
따라서 이 문 제 를 해결 하 는 수단 은 로고 의 실제 너비 에 따라 길 이 를 정 하고 height=width 를 해결 하 는 데 있다.
폭 을 어떻게 구 합 니까?
다음은 width 를 어떻게 얻 느 냐 의 문제 입 니 다.
위의 공식 너비=recyclerView 의 너비÷열 수 및 recyclerView 너비=gridLayout Manager.getWidth();열 수=gridLayoutManage.getSpanCount();
우 리 는 width 를 쉽게 얻 을 수 있 습 니 다= gridLayoutManager.getWidth()/gridLayoutManage.getSpanCount();
물론 gridLayoutManager 인 스 턴 스 를 얻 기 위해 서 는 RecyclerAdapter 구조 방법의 매개 변수 로 전송 해 야 합 니 다.
public RecyclerSysWebAdapter(Context context, ArrayList<IndexItem> list, OnItemClickListener listener,GridLayoutManager glm) {
this.list = list;
this.context = context;
this.listener = listener;
this.glm = glm;
}
recyclerView 호출 자 코드 는 다음 과 같 습 니 다.
GridLayoutManager glm_sys = new GridLayoutManager(getContext(),7);// 7
recycler_sys.setLayoutManager(glm_sys); //
recycler_sys.setAdapter(new RecyclerSysWebAdapter(getContext(),item_list_sys,onItemClickListener_sys,glm_sys));
다음은 RecyclerAdapter 에서 로고 의 길 이 를 이 값 으로 지정 하면 됩 니 다.
public void onBindViewHolder(SysWebHolder holder, final int position) {
...// button
ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams(); // button LayoutParams
parm.height = glm.getWidth()/glm.getSpanCount()
- holder.button_img.getPaddingLeft();
}
여기 서 Layout Params 류 도 말씀 드 리 겠 습 니 다.이 종 류 는 width\height 를 지정 하여 부모 레이아웃 에 원 하 는 사이즈 정 보 를 설명 합 니 다.부모 레이아웃 은 이 정보 에 따라 가능 한 한 만족 합 니 다.자,이제 우 리 는 로고 의 길 이 를 똑 같이 하 는 데 성공 했다!
그리고 하나 더 있어 요.
이게 끝 인 줄 알 아?또 뭐 까 먹 었 지?
위 설정 의 실제 효 과 를 살 펴 보 겠 습 니 다.
아이고 아이고!비록 효과 가 개선 되 었 지만,왜 여전히 장방형 입 니까?!
마음 을 가 라 앉 히 고 곰 곰 이 생각해 보 세 요.우리 가 얻 은 너 비 는 정말 로고 의 너비 입 니까?
아까 계산 한 값 은 아무래도 ① 번 거리 같 아 요.여보세요!
우 리 는 레이아웃 을 디자인 할 때 미관 을 위해 컨트롤 에 margin 과 padding 을 설정 하여 서로 간 에 일정한 거 리 를 유지 해 야 한다.우 리 는 너 비 를 얻 을 때 당연히 이 요 소 를 고려 해 야 한다!
margin 의 구체 적 인 값 코드 를 가 져 오 려 면 다음 과 같 습 니 다.
ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams();
((ViewGroup.MarginLayoutParams)parm).leftMargin;
layoutParams 인 스 턴 스 를 MarginLayoutParams 로 명시 적 으로 변환 해 야 구성원 변수 margin 값 을 가 져 올 수 있 습 니 다.이 글 에서 margin 값 을 가 져 옵 니 다:http://blog.csdn.net/yunxiaoxiaoyun/article/details/22314407클릭 하여 링크 열기
다음 과 같은 패 딩 코드 가 져 오기(기본 paddingLeft==paddingRight):
button.getPaddingLeft();
종합 하면 코드 는 다음 과 같다.
public void onBindViewHolder(SysWebHolder holder, final int position) {
...// button
ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams();
parm.height = glm.getWidth()/glm.getSpanCount()
- 2*holder.button_img.getPaddingLeft() - 2*((ViewGroup.MarginLayoutParams)parm).leftMargin;//margin 2
}
지금 문 제 는 철저히 해결 되 었 다!결 과 를 살 펴 보 자.PS:잊 어 버 릴 뻔 했 어 요.주의해 야 돼 요!
recycler_sys = act.findViewById(R.id.recycler_sys_website);
GridLayoutManager glm_sys = new GridLayoutManager(getContext(),sys_column);
recycler_sys.setLayoutManager(glm_sys);
recycler_sys.setAdapter(new RecyclerSysWebAdapter(getContext()
,item_list_sys,onItemClickListener_sys,glm_sys));
제 호출 순 서 는 setLayoutManager()다음 에 setAdapter()를 호출 하 는 것 입 니 다.두 문장의 순 서 를 바 꾸 면 설정 의 길이 가 효력 을 잃 게 됩 니 다!
구체 적 인 메커니즘 이 깊이 연구 되 지 않 은 이 유 는 setLayoutManager()과정 에서 각 컨트롤 의 길 이 를 다시 측정 하고 확인 하 며 이전 설정 을 덮어 쓰기 때 문 이 라 고 추측 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Android】RecyclerView+RadioButton의 작성RadioGroup을 사용하지 않고 작성합니다. RecyclerView 배치 activity_main.xml RadioButton 배치 view_item.xml RecyclerView 용 어댑터 작성. 어느 버튼을 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.