下面列出了android.util.DisplayMetrics#DENSITY_MEDIUM 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static String getDensityString(DisplayMetrics displayMetrics) {
switch (displayMetrics.densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
case DisplayMetrics.DENSITY_TV:
return "tvdpi";
default:
return String.valueOf(displayMetrics.densityDpi);
}
}
private static String getDensityString(DisplayMetrics displayMetrics) {
switch (displayMetrics.densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
case DisplayMetrics.DENSITY_TV:
return "tvdpi";
default:
return String.valueOf(displayMetrics.densityDpi);
}
}
public boolean isTabletDevice(Context activityContext) {
boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE);
if (device_large) {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi == DisplayMetrics.DENSITY_TV
|| metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
return true;
}
}
return false;
}
public boolean isTabletDevice(Context activityContext) {
boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE);
if (device_large) {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi == DisplayMetrics.DENSITY_TV
|| metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
return true;
}
}
return false;
}
public static String getScreenDensity() {
Context context = Aptoide.getContext();
int density = context.getResources().getDisplayMetrics().densityDpi;
switch (density) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
default:
return "hdpi";
}
}
private static String getDensityString(DisplayMetrics displayMetrics) {
switch (displayMetrics.densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
case DisplayMetrics.DENSITY_TV:
return "tvdpi";
default:
return String.valueOf(displayMetrics.densityDpi);
}
}
private int getLauncherIconDensity(int requiredSize) {
// Densities typically defined by an app.
int[] densityBuckets = new int[] {
DisplayMetrics.DENSITY_LOW,
DisplayMetrics.DENSITY_MEDIUM,
DisplayMetrics.DENSITY_TV,
DisplayMetrics.DENSITY_HIGH,
DisplayMetrics.DENSITY_XHIGH,
DisplayMetrics.DENSITY_XXHIGH,
DisplayMetrics.DENSITY_XXXHIGH
};
int density = DisplayMetrics.DENSITY_XXXHIGH;
for (int i = densityBuckets.length - 1; i >= 0; i--) {
float expectedSize = ICON_SIZE_DEFINED_IN_APP_DP * densityBuckets[i]
/ DisplayMetrics.DENSITY_DEFAULT;
if (expectedSize >= requiredSize) {
density = densityBuckets[i];
}
}
return density;
}
public static String getDensityPostfix(Resources res) {
String result = null;
switch (res.getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
result = "ldpi";
break;
case DisplayMetrics.DENSITY_MEDIUM:
result = "mdpi";
break;
case DisplayMetrics.DENSITY_HIGH:
result = "hdpi";
break;
case DisplayMetrics.DENSITY_XHIGH:
result = "xhdpi";
break;
case DisplayMetrics.DENSITY_XXHIGH:
result = "xxhdpi";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
result = "xxxhdpi";
break;
}
return result;
}
private void getScreenDensity() {
int density;
density = mContext.getResources().getDisplayMetrics().densityDpi;
switch(density)
{
case DisplayMetrics.DENSITY_LOW:
// not used; but can't hurt adding it in case something changes
formFactor = "LDPI";
break;
case DisplayMetrics.DENSITY_MEDIUM:
formFactor = "MDPI";
break;
case DisplayMetrics.DENSITY_HIGH:
formFactor = "HDPI";
break;
case DisplayMetrics.DENSITY_XHIGH:
formFactor = "XHDPI";
break;
case DisplayMetrics.DENSITY_XXHIGH:
formFactor = "XXHDPI";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
formFactor = "XXXHDPI";
break;
default:
formFactor = "UNKNOWN";
break;
}
}
static int getLauncherLargeIconSizeInner(Context context) {
final Resources res = context.getResources();
final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size);
final int sw = res.getConfiguration().smallestScreenWidthDp;
if (sw < 600) {
// Smaller than approx 7" tablets, use the regular icon size.
return size;
}
final int density = res.getDisplayMetrics().densityDpi;
switch (density) {
case DisplayMetrics.DENSITY_LOW:
return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW;
case DisplayMetrics.DENSITY_MEDIUM:
return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM;
case DisplayMetrics.DENSITY_TV:
return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
case DisplayMetrics.DENSITY_HIGH:
return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
case DisplayMetrics.DENSITY_XHIGH:
return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH;
case DisplayMetrics.DENSITY_XXHIGH:
return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH;
default:
// The density is some abnormal value. Return some other
// abnormal value that is a reasonable scaling of it.
return (int)((size*1.5f) + .5f);
}
}
/**
* Get the preferred density of icons for the launcher. This is used when
* custom drawables are created (e.g., for shortcuts).
*
* @return density in terms of DPI
*/
public int getLauncherLargeIconDensity() {
final Resources res = mContext.getResources();
final int density = res.getDisplayMetrics().densityDpi;
final int sw = res.getConfiguration().smallestScreenWidthDp;
if (sw < 600) {
// Smaller than approx 7" tablets, use the regular icon size.
return density;
}
switch (density) {
case DisplayMetrics.DENSITY_LOW:
return DisplayMetrics.DENSITY_MEDIUM;
case DisplayMetrics.DENSITY_MEDIUM:
return DisplayMetrics.DENSITY_HIGH;
case DisplayMetrics.DENSITY_TV:
return DisplayMetrics.DENSITY_XHIGH;
case DisplayMetrics.DENSITY_HIGH:
return DisplayMetrics.DENSITY_XHIGH;
case DisplayMetrics.DENSITY_XHIGH:
return DisplayMetrics.DENSITY_XXHIGH;
case DisplayMetrics.DENSITY_XXHIGH:
return DisplayMetrics.DENSITY_XHIGH * 2;
default:
// The density is some abnormal value. Return some other
// abnormal value that is a reasonable scaling of it.
return (int)((density*1.5f)+.5f);
}
}
static int getLauncherLargeIconSizeInner(Context context) {
final Resources res = context.getResources();
final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size);
final int sw = res.getConfiguration().smallestScreenWidthDp;
if (sw < 600) {
// Smaller than approx 7" tablets, use the regular icon size.
return size;
}
final int density = res.getDisplayMetrics().densityDpi;
switch (density) {
case DisplayMetrics.DENSITY_LOW:
return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW;
case DisplayMetrics.DENSITY_MEDIUM:
return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM;
case DisplayMetrics.DENSITY_TV:
return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
case DisplayMetrics.DENSITY_HIGH:
return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
case DisplayMetrics.DENSITY_XHIGH:
return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH;
case DisplayMetrics.DENSITY_XXHIGH:
return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH;
default:
// The density is some abnormal value. Return some other
// abnormal value that is a reasonable scaling of it.
return (int)((size*1.5f) + .5f);
}
}
/**
* @return The height of the system bar. This is
* done by querying the system's resources, or if that fails
* by using fallbacks for different screen densities.
*/
public static int getSystemBarHeight(Context context)
{
if (mBarHeight2 > 0) return mBarHeight2;
// Get display metrics for window.
final DisplayMetrics mMetrics = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(mMetrics);
int statusBarHeight;
switch (mMetrics.densityDpi)
{
case DisplayMetrics.DENSITY_HIGH:
statusBarHeight = HIGH_DPI_SYSTEM_BAR_HEIGHT;
break;
case DisplayMetrics.DENSITY_MEDIUM:
statusBarHeight = MEDIUM_DPI_SYSTEM_BAR_HEIGHT;
break;
case DisplayMetrics.DENSITY_LOW:
statusBarHeight = LOW_DPI_SYSTEM_BAR_HEIGHT;
break;
case DisplayMetrics.DENSITY_XHIGH:
statusBarHeight = XHIGH_DPI_SYSTEM_BAR_HEIGHT;
break;
default:
statusBarHeight = MEDIUM_DPI_SYSTEM_BAR_HEIGHT;
}
return statusBarHeight;
}
/**
* Set the chart text size based on screen metrics
*/
private void setTextSize() {
try {
DisplayMetrics displayMetrics = new DisplayMetrics();
displayMetrics = context.getResources().getDisplayMetrics();
log("setting text size, density is " + displayMetrics.densityDpi);
switch(displayMetrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
textSize = 12;
pointSize = 2f;
break;
case DisplayMetrics.DENSITY_MEDIUM:
textSize = 16;
pointSize = 3f;
break;
case DisplayMetrics.DENSITY_HIGH:
textSize = 18;
pointSize = 4f;
break;
case DisplayMetrics.DENSITY_XHIGH:
textSize = 20;
pointSize = 5f;
break;
case DisplayMetrics.DENSITY_XXHIGH:
textSize = 26;
pointSize = 7f;
break;
default:
break;
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Checks if the device is a tablet or a phone
*
* @param activityContext The Activity Context.
* @return Returns true if the device is a Tablet
*/
public DeviceType getDeviceType(Context activityContext) {
// Verifies if the Generalized Size of the device is XLARGE to be
// considered a Tablet
boolean xlarge = ((activityContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == SCREENLAYOUT_SIZE_XLARGE);
// If XLarge, checks if the Generalized Density is at least MDPI
// (160dpi)
if (xlarge) {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity)activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
// MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,
// DENSITY_TV=213, DENSITY_XHIGH=320
if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi == DENSITY_TV
|| metrics.densityDpi == DENSITY_XHIGH) {
// this is a tablet!
return DeviceType.Tablet;
}
}
// this is not a tablet!
return DeviceType.Handset;
}
@Test
public void testScaleDownDueToBoth_densityDominant() {
// Both the container size and the relative densities impose scale down requirements,
// but the density factor imposes a larger scale down, so we scale to those dimens
int targetDensity = DisplayMetrics.DENSITY_MEDIUM;
testCorrectInflationWithDensity(targetDensity, lowDensityDevice, boundingDimens_LESS_RESTRICTIVE, 75);
}
@Test
public void testScaleDownDueToBoth_containerDominant() {
// Both the container size and the relative densities impose scale down requirements,
// but the container restrictions impose a larger scale down, so we scale to those dimens
int targetDensity = DisplayMetrics.DENSITY_MEDIUM;
testCorrectInflationWithDensity(targetDensity, lowDensityDevice, boundingDimens_RESTRICTIVE, 50);
}
/**
* Gets density.
*
* @return the density
*/
public final String getDensity() {
String densityStr = null;
final int density = context.getResources().getDisplayMetrics().densityDpi;
switch (density) {
case DisplayMetrics.DENSITY_LOW:
densityStr = "LDPI";
break;
case DisplayMetrics.DENSITY_MEDIUM:
densityStr = "MDPI";
break;
case DisplayMetrics.DENSITY_TV:
densityStr = "TVDPI";
break;
case DisplayMetrics.DENSITY_HIGH:
densityStr = "HDPI";
break;
case DisplayMetrics.DENSITY_XHIGH:
densityStr = "XHDPI";
break;
case DisplayMetrics.DENSITY_400:
densityStr = "XMHDPI";
break;
case DisplayMetrics.DENSITY_XXHIGH:
densityStr = "XXHDPI";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
densityStr = "XXXHDPI";
break;
default:
//do nothing
break;
}
return CheckValidityUtil.checkValidData(densityStr);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent = getIntent();
mNewsTitle = intent.getStringExtra("news_title");
mNewsUrl = intent.getStringExtra("news_url");
setActionBarTitle(mNewsTitle);
int screenDensity = getResources().getDisplayMetrics().densityDpi;
WebSettings.ZoomDensity zoomDensity = WebSettings.ZoomDensity.MEDIUM;
switch (screenDensity)
{
case DisplayMetrics.DENSITY_LOW:
{
zoomDensity = WebSettings.ZoomDensity.CLOSE;
break;
}
case DisplayMetrics.DENSITY_MEDIUM:
{
zoomDensity = WebSettings.ZoomDensity.MEDIUM;
break;
}
case DisplayMetrics.DENSITY_HIGH:
{
zoomDensity = WebSettings.ZoomDensity.FAR;
break;
}
}
// 设置默认缩放方式尺寸
getWebview().getSettings().setDefaultZoom(zoomDensity);
getWebview().getSettings().setBuiltInZoomControls(true);
getWebview().loadUrl(mNewsUrl);
}
public static int dpToPx(int dp) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float px = dp * (metrics.densityDpi / DisplayMetrics.DENSITY_MEDIUM);
return Math.round(px);
}