您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页今日头条android自适应,今日头条解决适配(Android)

今日头条android自适应,今日头条解决适配(Android)

来源:伴沃教育

工具类如下:

/**

* @param activity

* @param application

* @param isLandscape 是否是横屏

*/

public class ScreenUtils {

/** 设计稿标准 */

private static final float width = 750f;

private static final float high = 1334f;

private static float textDensity = 0;

private static float textScaledDensity = 0;

/**

* 今日头条的屏幕适配方案

* 根据当前设备物理尺寸和分辨率去动态计算density、densityDpi、scaledDensity

* 同时也解决了用户修改系统字体的情况

* @param activity

*/

public static void setCustomDensity(@NonNull Activity activity) {

setCustomDensity(activity, false);

}

/**

* @param activity

* @param isLandscape 是否是横屏

*/

public static void setCustomDensity(@NonNull final Activity activity, boolean isLandscape) {

final Application application = activity.getApplication();

final DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();

if (textDensity == 0) {

textDensity = displayMetrics.density;

textScaledDensity = displayMetrics.scaledDensity;

application.registerComponentCallbacks(new ComponentCallbacks() {

@Override

public void onConfigurationChanged(Configuration configuration) {

if (configuration != null && configuration.fontScale > 0) {

textScaledDensity = application.getResources().getDisplayMetrics().scaledDensity;

}

}

@Override

public void onLowMemory() {

}

});

}

final float targetDensity;

if (isLandscape) {//横屏

targetDensity = displayMetrics.widthPixels / (high / 2); //当前UI标准750*1334

} else {

targetDensity = displayMetrics.widthPixels / (width / 2); //当前UI标准750*1334

}

final float targetScaledDensity = targetDensity * (textScaledDensity / textDensity);

final int targetDpi = (int) (160 * targetDensity);

displayMetrics.density = targetDensity;

displayMetrics.scaledDensity = targetScaledDensity;

displayMetrics.densityDpi = targetDpi;

final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics();

activityDisplayMetrics.density = targetDensity;

activityDisplayMetrics.scaledDensity = targetScaledDensity;

activityDisplayMetrics.densityDpi = targetDpi;

}

}

使用如下:

public class MainActivity extends AppCompatActivity {

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//在设置布局之前调用工具类方法

ScreenUtils.setCustomDensity(this);

setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.tv);

int densityDpi = getResources().getDisplayMetrics().densityDpi;

tv.setText("逻辑像素密度 dpi " + densityDpi);

}

}

//推荐使用

implementation 'me.jessyan:autosize:1.2.1'

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务