UIUtils.java 源代码
package utils;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.ss.android.socialbase.downloader.setting.DownloadSettingKeys;
import com.ss.android.socialbase.downloader.utils.DownloadExpSwitchCode;
import java.lang.reflect.InvocationTargetException;
public class UIUtils {
public static final int VIVO_FILLET = 8;
public static final int VIVO_NOTCH = 32;
public static float getScreenWidthDp(Context context) {
float f = context.getResources().getDisplayMetrics().density;
float f2 = context.getResources().getDisplayMetrics().widthPixels;
if (f <= 0.0f) {
f = 1.0f;
}
return (f2 / f) + 0.5f;
}
public static float getHeight(Activity activity2) {
int px2dip;
hideBottomUIMenu(activity2);
int realHeight = getRealHeight(activity2);
if (hasNotchScreen(activity2)) {
px2dip = px2dip(activity2, realHeight - getStatusBarHeight(activity2));
} else {
px2dip = px2dip(activity2, realHeight);
}
return px2dip;
}
public static void hideBottomUIMenu(Activity activity2) {
if (activity2 == null) {
return;
}
try {
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
activity2.getWindow().getDecorView().setSystemUiVisibility(8);
} else if (Build.VERSION.SDK_INT >= 19) {
activity2.getWindow().getDecorView().setSystemUiVisibility(3842);
activity2.getWindow().addFlags(DownloadExpSwitchCode.BUGFIX_SIGBUS_24_25);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getRealHeight(Context context) {
Display defaultDisplay = ((WindowManager) context.getSystemService("window")).getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= 17) {
defaultDisplay.getRealMetrics(displayMetrics);
} else {
defaultDisplay.getMetrics(displayMetrics);
}
return displayMetrics.heightPixels;
}
public static float getStatusBarHeight(Context context) {
if (context.getApplicationContext().getResources().getIdentifier("status_bar_height", "dimen", "android") > 0) {
return context.getApplicationContext().getResources().getDimensionPixelSize(r0);
}
return 0.0f;
}
public static int px2dip(Context context, float f) {
float f2 = context.getResources().getDisplayMetrics().density;
if (f2 <= 0.0f) {
f2 = 1.0f;
}
return (int) ((f / f2) + 0.5f);
}
public static int dp2px(Context context, float f) {
return (int) ((f * context.getResources().getDisplayMetrics().density) + 0.5f);
}
public static boolean hasNotchScreen(Activity activity2) {
return isAndroidPHasNotch(activity2) || getInt("ro.miui.notch", activity2) == 1 || hasNotchAtHuawei(activity2) || hasNotchAtOPPO(activity2) || hasNotchAtVivo(activity2);
}
public static boolean isAndroidPHasNotch(Activity activity2) {
if (Build.VERSION.SDK_INT < 28) {
return false;
}
try {
WindowInsets rootWindowInsets = activity2.getWindow().getDecorView().getRootWindowInsets();
return (rootWindowInsets != null ? rootWindowInsets.getDisplayCutout() : null) != null;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static int getInt(String str, Activity activity2) {
if (!isMiui()) {
return 0;
}
try {
Class<?> loadClass = activity2.getClassLoader().loadClass("android.os.SystemProperties");
return ((Integer) loadClass.getMethod("getInt", String.class, Integer.TYPE).invoke(loadClass, new String(str), new Integer(0))).intValue();
} catch (ClassNotFoundException e) {
e.printStackTrace();
return 0;
} catch (IllegalAccessException e2) {
e2.printStackTrace();
return 0;
} catch (IllegalArgumentException e3) {
e3.printStackTrace();
return 0;
} catch (NoSuchMethodException e4) {
e4.printStackTrace();
return 0;
} catch (InvocationTargetException e5) {
e5.printStackTrace();
return 0;
}
}
public static boolean hasNotchAtHuawei(Context context) {
try {
Class<?> loadClass = context.getClassLoader().loadClass("com.huawei.android.util.HwNotchSizeUtil");
return ((Boolean) loadClass.getMethod("hasNotchInScreen", new Class[0]).invoke(loadClass, new Object[0])).booleanValue();
} catch (Throwable unused) {
return false;
}
}
public static boolean hasNotchAtVivo(Context context) {
try {
Class<?> loadClass = context.getClassLoader().loadClass("android.util.FtFeature");
return ((Boolean) loadClass.getMethod("isFeatureSupport", Integer.TYPE).invoke(loadClass, 32)).booleanValue();
} catch (Throwable unused) {
return false;
}
}
public static boolean hasNotchAtOPPO(Context context) {
return context.getPackageManager().hasSystemFeature(getKllkDecryptString("com.kllk.feature.screen.heteromorphism"));
}
public static boolean isMiui() {
try {
return Class.forName("miui.os.Build") != null;
} catch (Exception unused) {
return false;
}
}
public static String getKllkDecryptString(String str) {
if (TextUtils.isEmpty(str)) {
return "";
}
if (str.contains("KLLK")) {
return str.replace("KLLK", "OPPO");
}
return str.contains(DownloadSettingKeys.oppo) ? str.replace(DownloadSettingKeys.oppo, "oppo") : "";
}
public static void setViewSize(View view, int i, int i2) {
if (view.getParent() instanceof FrameLayout) {
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams();
layoutParams.width = i;
layoutParams.height = i2;
view.setLayoutParams(layoutParams);
view.requestLayout();
return;
}
if (view.getParent() instanceof RelativeLayout) {
RelativeLayout.LayoutParams layoutParams2 = (RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams2.width = i;
layoutParams2.height = i2;
view.setLayoutParams(layoutParams2);
view.requestLayout();
return;
}
if (view.getParent() instanceof LinearLayout) {
LinearLayout.LayoutParams layoutParams3 = (LinearLayout.LayoutParams) view.getLayoutParams();
layoutParams3.width = i;
layoutParams3.height = i2;
view.setLayoutParams(layoutParams3);
view.requestLayout();
}
}
public static int getScreenWidthInPx(Context context) {
return context.getApplicationContext().getResources().getDisplayMetrics().widthPixels;
}
public static int getScreenHeightInPx(Context context) {
return context.getApplicationContext().getResources().getDisplayMetrics().heightPixels;
}
public static int getScreenHeight(Context context) {
return (int) (getScreenHeightInPx(context) + getStatusBarHeight(context));
}
public static void removeFromParent(View view) {
if (view != null) {
ViewParent parent = view.getParent();
if (parent instanceof ViewGroup) {
((ViewGroup) parent).removeView(view);
}
}
}
public static int[] getScreenSize(Context context) {
int[] iArr = {0, 0};
if (context == null) {
return iArr;
}
Display defaultDisplay = ((WindowManager) context.getSystemService("window")).getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= 17) {
defaultDisplay.getRealMetrics(displayMetrics);
} else {
defaultDisplay.getMetrics(displayMetrics);
}
iArr[0] = displayMetrics.widthPixels;
iArr[1] = displayMetrics.heightPixels;
return iArr;
}
}