안 드 로 이 드 핸드폰 화면 어댑터 해결 방법

0.머리말
안 드 로 이 드 의 화면 이 잘 어 울 려 요.안 드 로 이 드 의 서로 다른 사이즈,해상도 가 다른 핸드폰 에서 똑 같은 디 스 플레이 효 과 를 가 져 도 이 문 제 는 우리 안 드 로 이 드 개발 자 들 이 직면 해 야 할 문제 입 니 다.본 고 는 많은 선인 들 의 블 로 그 를 참고 하고 이 문제 에 대해 총 결 을 하여 간단명료 하 게 하려 고 한다.
전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/seu_calvin/article/details/52690498
1.기초 개념
(1)화면 사이즈,즉 핸드폰 대각선 의 물리 적 사이즈
1 인치=2.54cm  흔히 볼 수 있 는 휴대 전화 사 이 즈 는 5 인치,5.5 인치,6 인치 등 이다.
(2)화면 해상도,즉 핸드폰 이 가로,세로 에 있 는 픽 셀 포 인 트 를 합 친 것(일반적으로 화면의'너비 x 높이'로 묘사)
예 를 들 어 1080 dpx 1920 dp,즉 너비 방향 에 1080 개의 픽 셀 점 이 있 고 높이 방향 에 1920 개의 픽 셀 점,1px=1 픽 셀 점 이 있다.
Android 핸드폰 에서 흔히 볼 수 있 는 해상도:320 x480,480 x800,720 x1280,1080 x1920
(3)화면 픽 셀 밀도,즉 인치 당 픽 셀 포인트,단위 dpi
예 를 들 어 특정한 장 치 는 240 x 320 이 고 화면 크기 는 3.3 인치 이 며 이 장치 의 화면 픽 셀 밀 도 는 400/3.3=120 dpi 이 며 그 중에서 400 은 너비 가 높 은 픽 셀 의 피타 고 라 스 를 통 해 정리 된다.
Android 휴대 전 화 는 픽 셀 밀도 에 따라 다음 과 같은 몇 가지 화면 밀도 유형 으로 나 눌 수 있 습 니 다.

 (4)밀 도 는 픽 셀 과 상 관 없 이 단 위 는 dp 로 Android 특유 의 단위 입 니 다.
Android 개발 시 에는 보통 px 단위 가 아 닌 dp 를 사용 하여 그림 크기 를 설정 합 니 다.화면 픽 셀 밀도 가 다른 장치 에서 같은 효 과 를 표시 할 수 있 기 때 문 입 니 다.

/** 
 * dp px    
 * Created by SEU_Calvin on 2016/09/28 
 */ 
public class DensityUtils { 
  public static int dp2px(float dp , Context context){ 
    float density = context.getResources().getDisplayMetrics().density;//    0.75/1/1.5/2/3 
    //context.getResources().getDisplayMetrics().densityDpi //    120/160/240/320/480 
    return (int)(dp * density + 0.5f); 
  } 
  public static float px2dp(int px , Context context){ 
    float density = context.getResources().getDisplayMetrics().density; 
    return px/density; 
  } 
} 
(5)독립 비례 픽 셀,단 위 는 sp,Android 개발 시 텍스트 크기 를 설정 하 는 단위
글꼴 크기 의 첫 번 째 옵션 에 따라 크기 를 조정 할 수 있 습 니 다.12/14/18/22sp 를 글꼴 설정 의 크기 로 사용 하 는 것 을 추천 합 니 다.홀수 와 작은 수 를 사용 하 는 것 을 추천 하지 않 아 정밀도 손실 문제 가 발생 하기 쉽 습 니 다.
상기 기초 개념 을 소개 했다.우 리 는 다음 에 구조 가 적당 하고 이미지 가 적당 하 며 코드 가 적당 하 다 는 세 가지 측면 에서 스크린 이 적당 한 해결 방안 을 소개 했다.
2.배치 가 적당 하 다
(1)상대 레이아웃 을 사용 하 는 것 을 추천 합 니 다.절대 레이아웃 을 사용 하지 않 습 니 다.상대 적 인 레이아웃 이 화면의 크기 가 바 뀌 었 을 때 보기 사이 의 상대 적 인 위 치 는 변 하지 않 기 때문이다.
(2)dp 와 sp(가능 한 한 px 를 사용 하지 않 음),wrapcontent、match_parent 와 weight 가 레이아웃 을 제어 합 니 다.가중치 weight 를 사용 하면 모든 장치 에 완벽 하 게 어 울 릴 것 이다.
(3)서로 다른 화면 크기 의 장 치 를 위해 서로 다른 레이아웃 을 설계 하고 한정 부 를 설정 하여 프로그램 이 실 행 될 때 현재 장치 의 크기 에 따라 적당 한 레이아웃 자원 을 자동 으로 불 러 옵 니 다.
예 를 들 어 우 리 는 먼저 두 개의 레이아웃 파일 을 쓰 는데 각각 다음 과 같다.
핸드폰 레이아웃(기본 값):res/layout/main.xml
어 울 리 는 사이즈>7 인치 평판 의 레이아웃:res/layout/mainpb.xml
그리고 다음 두 개의 파일 을 추가 합 니 다.시스템 은 Android 버 전에 따라 어떤 레이아웃 프로필 을 사용 할 지 자동 으로 선택 합 니 다.

//  Android 3.2        
res/values-large/layout.xml 
<resources> 
  <item name="main" type="layout">@layout/main_pb</item> 
</resources> 
 
//  Android 3.2        
res/values-sw600dp/layout.xml 
<resources> 
<item name="main" type="layout">@layout/main_pb</item> 
</resources> 
위 두 설정 파일 은 레이아웃 을 진정 으로 정의 하지 않 았 습 니 다.main 을@layot/main 으로 만 설정 하 였 습 니 다.pb 의 별명.
만약 이렇게 하지 않 는 다 면,mainpb.xml 레이아웃 파일 의 내용 을 두 부 로 복사 하여 각각 res/layot-large/main.xml 와 res/layot-sw600dp/main.xml 를 넣 어 3.2 이전 과 이후 에 적합 하 게 해 야 합 니 다.
3.그림 이 잘 어울린다
(1)예 를 들 어 이러한 수요 가 있 으 면 단추 의 배경 그림 은 단추 크기 에 따라 달라 져 야 합 니 다.일반적인 그림 을 사용 하면 위 와 같은 기능 을 수행 할 수 없습니다.실행 할 때 그림 을 고 르 게 늘 리 거나 압축 하기 때 문 입 니 다.
이 때 는 나 인 패 치 그림(특수 처 리 된 PNG 그림,9.png 접미사 이름 사용)을 사용 할 수 있 으 며,9 패 치 그림 은 그림 의 스 트 레 칭 영역 과 비 스 트 레 칭 영역 을 지정 할 수 있 으 며,스 트 레 칭 이 필요 할 때 시스템 은 자동 으로 스 트 레 칭 하고 싶 은 부분 을 스 트 레 칭 할 수 있다.주의해 야 할 것 은.9 그림 은 여러 해상도 의 그림 이 필요 없 이 drawable 폴 더 에 두 면 됩 니 다.

빨간색 상자 구역:세로 로 늘 어 나 는 구역 을 표시 합 니 다.즉,그림 이 세로 로 늘 어 나 야 할 때 빨간색 구역 만 지정 합 니 다.
녹색 상자 구역:가로 스 트 레 칭 구역 을 표시 합 니 다.즉,그림 이 가로 스 트 레 칭 이 필요 할 때 스 트 레 칭 녹색 구역 만 지정 합 니 다.
 (2)그림 은 아래 그림 hdpi,mdpi 등 디 렉 터 리 에 해당 하 는 해상도 의 그림 을 넣 을 필요 가 없다.그러면 APK 가 커진다.보통 1280*720 세트 만 하고 hdpi 나 xhdpi 아래 에 두 고 문제 가 생기 면 화면 에 문제 가 있 는 그림 을 교체 하면 된다.또 APK 크기 를 줄 이 는 방법 에 대해 서 는 안 드 로 이 드 개발 인 APK 크기 를 줄 이 는 것 을 참고 할 수 있다.
3.코드 적합
(1)예 를 들 어 하나의 수요 가 있 으 면 하나의 공간 폭 을 실현 해 야 하 며 화면의 1/3 이다.이 럴 때 코드 로 이 루어 집 니 다.

/** 
 *        
 * Created by SEU_Calvin on 2016/09/28 
 */ 
WindowManager wm = getWindowManager();   
int width = wm.getDefaultDisplay().getWidth(); 
LinearLayout.LayoutParams params = (LayoutParams)tv.getLayoutParams(); 
params.width = width/3; 
tv.setLayoutParams(params); 
주의해 야 할 것 은 일반 코드 가 적합 하려 면 도구 류(위 에 붙 어 있 음)를 써 서 dp2px 를 실현 해 야 합 니 다.코드 에 있 는 매개 변 수 는 일반적으로 px 값 이 필요 하기 때문에 서로 다른 장치 의 화면 밀 도 를 통 해 dp2px 를 실현 해 야 합 니 다.
 (2)코드 가 적당 한 또 다른 사용 장면 은 로드 레이아웃 에 따라 서로 다른 절 차 를 결정 하 는 것 이다.다음 과 같다.

setContentView(R.layout.main_layout);//                  
Button btn = (Button)findViewById(R.id.btn);//             
if(btn == null){  
  //    1...  
}else{  
  //    2...  
}  

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기