2012-09-27 115 views
13

我正在使用galaxy tab 1,7英寸hdpi和galaxy tab plus 7英寸hdpi但分辨率更高,而在我的应用程序中,文本可以在galaxy tab中正常读取,但在galaxy tab中可以正常读取有太多的小。 在字体大小和布局大的情况下使用sp。任何想法?谢谢不同分辨率的文字大小

+0

也许你可以从这里找到答案还可以从这里找到答案http://stackoverflow.com/questions/16706076/font-size-and-images-for-different-devices –

回答

2

您可以使用this尺寸中的任何一种,根据屏幕的物理尺寸以的价格销售。所有设备上的文本将具有相同的物理尺寸。

15

你只需要创建与密度或屏幕尺寸 不同的文件夹一样

选项1.

values-large 
values-small 
values-normal 

更多解释检查此链接...

Multiple Screen Support

选项2

mTextView.setTextSize(16 * getResources().getDisplayMetrics().density); 

这会给TEXTSIZE取决于密度..

+0

是的,但2片使用大布局,但具有不同的分辨率,然后我会有同样的问题。 – colymore

4

试试这个:

这样

android:textSize= "10sp" 

SP

比例独立像素 - 这就像dp单元,但它也是 根据用户的字体大小首选项缩放。建议您在指定字体大小时使用本机的 ,因此它们将根据屏幕密度和用户偏好进行调整。

+5

textSize,而不是文字大小 –

18

通过硬件规格Galaxy Tab 1是MDPI设备,但由于它使用Android 2.x,因此它采用编程方式将其设置为使用HDPI资源。所以我可以建议你做如下:

  1. values目录中创建文件dimens.xml
  2. 放在那里<dimen name="font_size">30sp</dimen>。这是默认的字体大小。
  3. values-large目录下创建文件dimens.xml
  4. 放在那里<dimen name="font_size">20sp</dimen>。这是字体大小的Galaxy Tab 1
  5. values-sw600dp目录下创建文件dimens.xml
  6. 放在那里<dimen name="font_size">30sp</dimen>。这是Android 3.x及更新版本的其他平板电脑的字体大小。
  7. 在布局指定android:textSize="@dimens/font_size"
+0

为什么你需要把文字尺寸放在不同的值文件夹? Android将默认值文件夹视为mdpi设备的一个文件夹,并根据当前设备配置对其进行缩放。如果设备处于大类别中,则会对其进行缩放。纠正我,如果我错了。 – karn

+0

因为Galaxy Tab 1是MDPI,但是将文字缩放到HDPI尺寸 – vasart

+1

尺寸和分辨率是两码事。小尺寸设备可以位于hdpi类别中,而ldpi类别可以位于大型设备中。那么如何使用values-large和values-small在这里有什么帮助? – karn

32

这应该是对你有所帮助,如果你想以编程方式设置大小。文本将在相同的大小显示每个设备上

TextView text = new TextView(this); 
text.setText("text"); 
text.setTextSize(16 * getResources().getDisplayMetrics().density); 
+2

我试过'Canvas.setTextSize()'。它确实有帮助,尽管文本在我测试过的两个设备上的大小不一样。 – hBrent

+0

如果屏幕尺寸较大但密度较低,则不起作用。 – usman

+0

但不是密度在DP?它喜欢将xml中的文本大小设置为16dp,这是不对的,我认为 – has19

4

(1)I认为使用“DP”或“浸渍”为文本比使用“SP”更好,因为DP(密度像素)根据屏幕密度调整。所以文本在高密度设备上看起来会更大,在低密度设备上看起来会更小。

(2),或者如果你特别希望使用“SP”为文本大小,那么就可以检测到该设备的密度,然后相应地设置文本的大小:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    switch(displayMetrics.densityDpi){ 
     case DisplayMetrics.DENSITY_LOW: 
      //set text-size for low-density devices. 
      break; 
     case DisplayMetrics.DENSITY_MEDIUM: 
      //set text-size for medium-density devices. 
      break; 
     case DisplayMetrics.DENSITY_HIGH: 
      //set text-size for high-density devices. 
      break; 
    } 
1

的TextView headerTextView(字符串标签){

TextView headerTextView = new TextView(this.context); 
    float scale = context.getResources().getDisplayMetrics().density; 
    if(scale > 2.0) { 
    headerTextView.setWidth(210); 
    headerTextView.setHeight(120); 
    headerTextView.setTextSize(17); 
    } 
    else { 
     headerTextView.setWidth(125); 
     headerTextView.setHeight(60); 
     headerTextView.setTextSize(21); 
    } 
2

下面的代码来调整在一个TextView字体大小缩放,使用在用户系统字体大小设置。

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getRealSize(size); 
int screenWidth = size.x; 
float fontscale = getResources().getConfiguration().fontScale; 
float textSize = (screenWidth/ fontscale)/10; 
Log.e(TAG, "textSize is: " + textSize); 
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 
+1

调用需要API level 17 for'display.getRealSize(size);' –

0

总之,你可以利用scalable DPscalable Font的方法。

Android项目结构固有地允许通过在dimens.xml文件定义它们支持的屏幕尺寸指定不同的字体大小(SP)和余量的值(DP)。但仍然存在的问题是 - 要使用什么值? UX设计师通常只提供一套样式指南(例如,360x640 DP屏幕尺寸),并且不提供所有其他支持的屏幕尺寸。因此,为其他支持的屏幕尺寸使用正确的价格仍然没有答案。

一个很好的解决方案(按我的understading)是利用dimens.xml文件现成的可扩展字典,类似于this库提供文件的字典的东西。在将这些xml文件添加到项目中之后,您只需使用布局中的键,然后Android会自动使用各个目录中的字体/边距值。请参考here的视觉差异 - 有和没有这种方法。

相关问题