Android 간단 하고 사용 하기 좋 은 화면 어댑터
화면 을 맞 추 려 면 공식 을 하나 알 아 보 겠 습 니 다.
dp 와 px 의 변환 공식:
DisplayMetrics 와 어댑터 와 관련 된 몇 가지 변수:
public static float applyDimension(int unit, float value,DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
그림 의 decode,BitmapFactory.decodeResource Stream 방법
@Nullable
public static Bitmap decodeResourceStream(@Nullable Resources res, @Nullable TypedValue value,
@Nullable InputStream is, @Nullable Rect pad, @Nullable Options opts) {
validate(opts);
if (opts == null) {
opts = new Options();
}
if (opts.inDensity == 0 && value != null) {
final int density = value.density;
if (density == TypedValue.DENSITY_DEFAULT) {
opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;
} else if (density != TypedValue.DENSITY_NONE) {
opts.inDensity = density;
}
}
// densityDpi
if (opts.inTargetDensity == 0 && res != null) {
opts.inTargetDensity = res.getDisplayMetrics().densityDpi;
}
return decodeStream(is, pad, opts);
}
만약 에 우리 가 기본 값 으로 360 dp 의 화면 을 기준 으로 디자인 한다 면 view 의 너 비 를 화면의 절반 으로 설정 하려 면 180 dp 이 고 1080*1920 의 화면 에 540 px 가 있어 야 합 니 다.계산 에 통과 하 다그래서 우 리 는 최종 실현 방안 은 다음 과 같다.
private static final float defaultWidth = 360;
private static float appDensity;
private static float appScaleDensity;
public static void setCustomDensity(Application application, Activity activity){
DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
if (appDensity == 0){
appDensity = displayMetrics.density;
appScaleDensity = displayMetrics.scaledDensity;
//
application.registerComponentCallbacks(new ComponentCallbacks() {
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
if (newConfig != null && newConfig.fontScale >0){
appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity;
}
}
@Override
public void onLowMemory() {
}
});
}
final float targetDensity = displayMetrics.widthPixels/defaultWidth;
final float targetScaleDensity = targetDensity *(appScaleDensity/appDensity);
final int targetDensityDpi = (int) (targetDensity * 160);
displayMetrics.density = targetDensity;
displayMetrics.scaledDensity = targetScaleDensity;
displayMetrics.densityDpi = targetDensityDpi;
final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics();
activityDisplayMetrics.density = targetDensity;
activityDisplayMetrics.scaledDensity = targetScaleDensity;
activityDisplayMetrics.densityDpi = targetDensityDpi;
}
항목 에서 사용:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView
DensityHelper.setCustomDensity(getApplication(),this);
setContentView(R.layout.activity_main);
}
부족 한 점 이 있 으 면 모두 에 게 지적 하고 함께 공부 하 자.이상 은 안 드 로 이 드 가 간단 하고 사용 하기 좋 은 화면 어댑터 방안 의 상세 한 내용 입 니 다.안 드 로 이 드 화면 어댑터 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.