不同的分辨率支持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)解决这个problem
的best
方法是什么?
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文件夹:
-
移动
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).
-
平板电脑决议
字体大小:
注意:每当处理
textSize
时都要尽量使用SP,比如textsize=12sp
-
使用预定义的
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" />
-
为每个设备使用
dimension.xml
:从Google IO Pdf中 ,我们看到以下结构:
-
移动:
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)。
-
片剂:
对于平板电脑,您可以使用更具体的文件夹,如
values-xlarge
,values-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))
-
了解更多信息:
请参阅支持多个屏幕 。
请参阅Google IO Pdf的第77页devise设备密度 。 在那里,你会find处理不同设备的
dimens.xml
的方法。- 为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文件夹,并放入所有图像。