不同的分辨率支持android

编辑问题:

移动解决scheme
我想devise不同的屏幕dpi像下面的决议。
分辨率320×480,
480×800,
540×960,
720×1280(三星S3),
1080×1920(S4,Nexus5,Nexus 5x,Moto G4),
2560 x 1440(Nexus 6,Nexus 6p,三星边缘)

平板电脑决议
480×800(micromax),
600×1024(samsung tab2),
800×1280(nexus 7),
1200×1920(新联网7),
2048×1536(nexus 9)

我想根据设备显示分辨率使用不同的字体大小

Q1)解决这个problembest方法是什么?

Q2)做抛出编码或XML的最佳select是什么?

Q3)哪个可绘制文件夹代表哪个设备分辨率?

Q4)应用程序启动器图标大小为不同的分辨率?

应用程序启动器图标大小以不同的分辨率的像素

移动解决scheme

  • mipmap-mdpi(48X48)
  • mipmap-hdpi(72X72)
  • mipmap-xhdpi(96X96)
  • mipmap-xxhdpi(144X144)
  • mipmap-xxxhdpi(192X192)

平板电脑布局:

如果您希望使用平板电脑的布局,请使用以下文件夹:

 layout-large-mdpi (1024x600) layout-large-tvdpi (800x1280) layout-large-xhdpi (1200x1920) layout-xlarge-mdpi (1280x800) layout-xlarge-xhdpi (2560x1600) 

Drawables文件夹:

  1. 移动

     res/drawable (default) res/drawable-ldpi/ (240x320 and nearer resolution) res/drawable-mdpi/ (320x480 and nearer resolution) res/drawable-hdpi/ (480x800, 540x960 and nearer resolution) res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc) res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc) res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge). 
  2. 平板电脑决议 在这里输入图像描述

    字体大小:

注意:每当处理textSize时都要尽量使用SP,比如textsize=12sp

  1. 使用预定义的textAppearance

    它将根据设备密度自动设置文本大小。

     <TextView android:textAppearance="?android:attr/textAppearanceSmall"/> <TextView android:textAppearance="?android:attr/textAppearanceMedium"/> <TextView android:textAppearance="?android:attr/textAppearanceLarge" /> 

    示例用法:

     <TextView style="@android:style/TextAppearance.Small" android:text="Sample Text - Small" /> <TextView style="@android:style/TextAppearance.Medium" android:text="Sample Text - Medium" /> <TextView style="@android:style/TextAppearance.Large" android:text="Sample Text - Large" /> 
  2. 为每个设备使用dimension.xml

    Google IO Pdf中 ,我们看到以下结构:

    1. 移动:

       res/values/dimens.xml(default) res/values-ldpi/dimens.xml (240x320 and nearer resolution) res/values-mdpi/dimens.xml (320x480 and nearer resolution) res/values-hdpi/dimens.xml (480x800, 540x960 and nearer resolution) res/values-xhdpi/dimens.xml (720x1280 - Samsung S3, Micromax Canvas HD, etc) res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc) 

      res / values-xxxhdpi / dimens.xml(1440X2560 – Nexus 6,Samsung S6edge)。

    2. 片剂:

      对于平板电脑,您可以使用更具体的文件夹,如values-xlargevalues-large

       res/values-large/dimens.xml (480x800) res/values-large-mdpi/dimens.xml (600x1024) 

      要么

       res/values-sw600dp/dimens.xml (600x1024) res/values-sw720dp/dimens.xml (800x1280) res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10") res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest)) 

了解更多信息:

  1. 请参阅支持多个屏幕 。

  2. 请参阅Google IO Pdf的第77页devise设备密度 。 在那里,你会find处理不同设备的dimens.xml的方法。

  3. 为Nexus 6和Nexus 9准备好应用程序

摘自支持多个屏幕 :

与密度无关的像素相当于160dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基准密度。 在运行时,系统根据所使用的屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。 dp单位转换为屏幕像素很简单: px = dp * (dpi / 160) 。 例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。 定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示您的UI。

首先为不同的屏幕创build不同的值文件夹,然后根据res->values->dimens.xml文件中的屏幕大小,并使用"@dimen/text_size"调用简单的字体大小。

 res/values/dimens.xml res/values-small/dimens.xml res/values-normal/dimens.xml res/values-xlarge/dimens.xml //for small <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">15sp</dimen> </resources> //for normal <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">20sp</dimen> </resources> //for large <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">30sp</dimen> </resources> //for xlarge <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">40sp</dimen> </resources> 

并在TextView检索字体大小,如下所示。

 <TextView android:id="@+id/lblHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/text_size" android:textStyle="bold" android:typeface="serif" /> 

基本上你需要创build一个像这样的文本样式:

 <style name="CodeFont"> <item name="android:textSize">30sp</item> </style> 

请阅读http://developer.android.com/guide/topics/ui/themes.html

并使用android支持不同的屏幕指南创build不同的大小,你需要在右res文件夹中的不同屏幕,如下所示: http : //developer.android.com/guide/practices/screens_support.html

注意:我不太清楚在什么情况下你会这样做,使用字体大小的SP单位将缩放字体在不同的手机上看起来差不多相同的大小。

为了避免不同的屏幕分辨率和不同的密度的问题,我根据屏幕的百分比宽度和高度来确定所有东西的大小和位置。 如果根据屏幕的宽度或高度百分比调整文本大小,则字体将在所有设备和所有分辨率上成为正确的大小。 要根据其空间的宽度和高度获得正确的字体大小,只需使用以下函数:

 private float SetTextSize(String text, int width, int height) { Paint paint = new Paint(); float textWidth = paint.measureText(text); float textSize = (int) ((width / textWidth) * paint.getTextSize()); paint.setTextSize(textSize); textWidth = paint.measureText(text); textSize = (int) ((width / textWidth) * paint.getTextSize()); // Re-measure with font size near our desired result paint.setTextSize(textSize); // Check height constraints FontMetricsInt metrics = paint.getFontMetricsInt(); float textHeight = metrics.descent - metrics.ascent; if (textHeight > height) { textSize = (int) (textSize * (height / textHeight)); paint.setTextSize(textSize); } return textSize; } 

以下是获取屏幕宽度和高度的代码:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); screenWidth = size.x; screenHeight = size.y; } else { Display display = getWindowManager().getDefaultDisplay(); screenWidth = display.getWidth(); screenHeight = display.getHeight(); } 

要获得所需的字体大小,只需根据屏幕宽度和屏幕高度来构build一个区域,然后调整它,直到字体大小看起来正确。 一旦你看起来正确,它应该看起来正确的所有设备。

 float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15)); 

我希望这可以帮助你

首先您的应用程序devise为一个决议。

例如:假设你的手机分辨率为380 * 480

  mobile screen width:380 textView size is 80dp Assume : if width is 380dp then 100 % then textview width 80dp then how many %(per). ower answer is: 25 % 

使用belove公式编程查找屏幕大小

  DisplayMetric displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); ScreenHeight = displaymetrics.heightPixels; ScreenWidth = displaymetrics.widthPixels; txt_height = (int)((ScreenHeight*14.58)/100); txt_width = (int)((ScreenWidth*37.5)/100); LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width ); txt_Name.setLayoutParams(normal_param); 

我认为这是一个很好的答案:

文字大小和不同的android屏幕尺寸

但是,在这里你可以用屏幕分辨率来做到这一点:

您可以为每个分辨率创build“值”资源目录

 values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp) for example: 320*480 will be values-w320p-h480dp 

在每个目录(包括默认值dir)中创build一个名为“dimens.xml”的文件,内容为:

  for exmaple (the value related to the resolution): <dimen name="def_font_size">10sp</dimen> 

现在,您可以使用“@ dimen / def_font_size”或在默认值目录中创build一个样式。

将此添加到“styles.xml”中:

 <style name="FontSize"> <item name="android:textSize">@dimen/def_font_size</item> </style> 

我已经创build了一个函数,根据屏幕大小将dp的大小转换为大小,对我来说工作正常。 任何人根据屏幕文字大小的问题应该试试这个。

 public float convertFromDp(int input) { final float scale = getResources().getDisplayMetrics().density; return ((input - 0.5f) / scale); } 

简单地给它的值给文本视图大小编程如下

 tvTextView1.setTextSize(convertFromDp(24)); 

对于nexus 6设备支持,创builddrawable-560dpi文件夹,并放入所有图像。