编辑问题:
移动分辨率:
我想设计不同的屏幕dpi,如下面的分辨率。
320x480,
480×800,
540x960,
720x1280(三星S3),
1080x1920(S4,Nexus5,Nexus 5x,Moto G4),> 2560 x 1440(Nexus 6,Nexus 6p,Samsung edge)
平板电脑分辨率:
480x800(micromax),
600x1024(三星tab2),
800x1280(nexus 7),
1200x1920(new nexus 7),
2048x1536(nexus 9)
我想使用不同的字体大小,具体取决于设备的显示分辨率。
Q1)best
解决这个问题的方法是什么problem
?
Q2)什么是抛出编码或XML的最佳选择?
Q3)哪个drawable文件夹代表哪个设备分辨率?
Q4)针对不同分辨率的Application Launcher图标大小?
答案 0 :(得分:184)
不同分辨率的应用启动器图标大小(以像素为单位)
移动解决方案
如果您希望使用特定于平板电脑的布局,请使用以下文件夹:
layout-large-mdpi (1024x600)
layout-large-tvdpi (800x1280)
layout-large-xhdpi (1200x1920)
layout-xlarge-mdpi (1280x800)
layout-xlarge-xhdpi (2560x1600)
移动
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))
有关详情:
请参阅设计device density的 Google IO Pdf 第77页。在那里,您将找到为不同设备处理
dimens.xml
的方法。- 为Nexus 6 and Nexus 9准备好您的应用。
醇>
与密度无关的像素相当于a上的一个物理像素 160 dpi屏幕,这是系统假定的基线密度 对于“中等”密度屏幕。在运行时,系统透明 根据实际情况,根据需要处理dp单位的任何缩放 使用中的屏幕密度。将dp单位转换为屏幕 像素很简单:
px = dp * (dpi / 160)
。例如,240 dpi 屏幕,1 dp等于1.5个物理像素。你应该总是使用dp 定义应用程序UI时的单位,以确保正确显示 你的用户界面在不同密度的屏幕上。
答案 1 :(得分:27)
首先,为不同的屏幕创建不同的值文件夹,然后根据屏幕设置大小
在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" />
答案 2 :(得分:8)
基本上你需要创建一个像这样的文本样式:
<style name="CodeFont">
<item name="android:textSize">30sp</item>
</style>
在此处详细了解http://developer.android.com/guide/topics/ui/themes.html
使用不同屏幕的Android支持指南,为右侧res文件夹中的不同屏幕创建所需的不同尺寸,如下所述:http://developer.android.com/guide/practices/screens_support.html
旁注:我真的不明白你想要在什么情况下这样做,使用SP单位进行字体大小会缩放字体,使其在不同的手机上看起来大致相同。
答案 3 :(得分:8)
为了避免不同屏幕分辨率和不同密度的问题,我根据屏幕的百分比宽度和高度来确定和定位所有内容。如果根据屏幕的百分比宽度或高度调整文本大小,则字体在所有设备和所有分辨率上的大小都将正确。要根据空间的宽度和高度获得正确的字体大小,只需使用此功能:
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();
}
要获得所需的字体大小,只需根据屏幕宽度和屏幕高度组成一个区域并调整它直到字体大小正确。一旦你看起来正确,它应该在所有设备上都是正确的。
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));
我希望这有助于你
答案 4 :(得分:4)
首先是一个分辨率的应用程序设计。
示例:假设您的移动分辨率为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);
答案 5 :(得分:3)
我认为这是一个很好的答案:
Text size and different android screen sizes
但是在这里你可以用屏幕分辨率来做到这一点:
您可以为每个分辨率创建“值”资源目录,例如
values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp
在每个目录中(包括默认值dir)创建一个名为“dimens.xml”的文件,其内容为:
for exmaple (the value related to the resolution):
<dimen name="def_font_size">10sp</dimen>
现在您可以使用“@ dimen / def_font_size” 或在默认值目录中创建样式。
将此添加到“styles.xml”:
<style name="FontSize">
<item name="android:textSize">@dimen/def_font_size</item>
</style>
答案 6 :(得分:1)
我已经创建了一个函数,可以根据屏幕大小将dp的大小转换为大小,对我来说效果很好。任何一个根据屏幕有文字大小问题的人都应该尝试一下。
public float convertFromDp(int input) {
final float scale = getResources().getDisplayMetrics().density;
return ((input - 0.5f) / scale);
}
简单地将它给出的值赋予文本视图大小,如下所示
tvTextView1.setTextSize(convertFromDp(24));
答案 7 :(得分:1)
对于nexus 6设备支持,请创建drawable-560dpi文件夹并将所有图像放入其中。