오늘 톱기사의 안드로이드 적합 방안은 소장할 만하다
2515 단어 안드로이드 개발
예를 들어 디자인 원고의 폭이 360px라면 개발 쪽에서 목표 dp값을 360dp로 설정하고 서로 다른 장치에서density값을 동태적으로 수정하여 px/density라는 값이 시종 360dp임을 보장한다. 그러면 UI가 서로 다른 장치에서 일치하도록 보장할 수 있다.
이 방안은 침입성이 매우 낮고 개인 API와 관련이 없기 때문에 아주 좋은 방안일 것이다. 나는 density를 강제로 수정하는 것이 다른 영향을 미칠지 당분간 생각하지 못했다. 오늘의 톱공장이 사용하고 있는 이상 안정성은 보장되어야 한다.
그러나 내 관찰에 의하면 이 방안은 오래된 프로젝트에 그다지 우호적이지 않다. 시스템의density값을 수정한 후에 전체 레이아웃의 실제 사이즈가 바뀔 수 있기 때문이다. 만약에 오래된 프로젝트 파일에서 사용하려면 전체 레이아웃 파일의 사이즈는 디자인 원고에 따라 다시 한 번 수정해야 할 것 같다.따라서 오래된 프로젝트를 유지하거나 개조하고 있다면 이 방안을 사용하면 심사숙고해야 한다.
구체적인 코드는 다음과 같습니다.
//
// density , dp ,
// @param activity
// @param application
private static float sNoncompatDensity;
private static float sNoncompatScaledDensity;
public static void setCustomDensity(@NonNull Activity activity, @NonNull final Application application){
DisplayMetrics appDisplayMetrics=application.getResources().getDisplayMetrics();
if (sNoncompatDensity==0){
sNoncompatDensity=appDisplayMetrics.density;
sNoncompatScaledDensity=appDisplayMetrics.scaledDensity;
application.registerComponentCallbacks(new ComponentCallbacks() {
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (newConfig!=null&&newConfig.fontScale>0){
sNoncompatScaledDensity=application.getResources().getDisplayMetrics().scaledDensity;
}
}
@Override
public void onLowMemory() {
}
});
}
float targetDensity=appDisplayMetrics.widthPixels/360;
float targetScaleDensity=targetDensity*(sNoncompatScaledDensity/sNoncompatDensity);
int targetDensityDpi=(int)(160*targetDensity);
appDisplayMetrics.density=targetDensity;
appDisplayMetrics.scaledDensity=targetScaleDensity;
appDisplayMetrics.densityDpi=targetDensityDpi;
final DisplayMetrics activityDisplayMetrics=activity.getResources().getDisplayMetrics();
activityDisplayMetrics.density=targetDensity;
activityDisplayMetrics.scaledDensity=targetScaleDensity;
activityDisplayMetrics.densityDpi=targetDensityDpi;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Android] 둥글게 펼쳐지는 Ripple을, 바삭하게 구현간이적으로 터치 피드백이 없는 버튼이나 레이아웃, 탭 범위가 좁아져 버린 버튼 등에, 범위 밖으로 둥글게 퍼지는 Ripple로 탭감, 영역을 조금 늘립니다. 이런 느낌 (화질 나쁘고 미안해..) Ripple을 내고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.