我正在使用galaxy tab 1、7inch hdpi和galaxy tab plus、7 inch hdpi但分辨率更高,在我的应用程序中,可以在galaxy tab中很好地阅读文本,但在galaxy tab plus中有太多的小。我在字体大小和布局中使用 sp。任何想法?谢谢
12 回答
如果您想以编程方式设置大小,这应该对您有所帮助。文本将在每台设备上以相同大小显示
TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
根据硬件规格,Galaxy Tab 1 是 MDPI 设备,但由于它使用 Android 2.x,三星以编程方式将其设置为使用 HDPI 资源。所以我可以建议你做到以下几点:
dimens.xml
在values
目录中创建文件。- 放在那里
<dimen name="font_size">30sp</dimen>
。这是默认字体大小。 dimens.xml
在values-large
目录中创建文件。- 放在那里
<dimen name="font_size">20sp</dimen>
。这是 Galaxy Tab 1 的字体大小。 dimens.xml
在values-sw600dp
目录中创建文件。- 放在那里
<dimen name="font_size">30sp</dimen>
。这是其他搭载 Android 3.x 及更高版本的平板电脑的字体大小。 - 在布局中指定
android:textSize="@dimens/font_size"
您只需要创建与密度或屏幕尺寸相关的不同文件夹,例如
选项1。
values-large
values-small
values-normal
有关更多说明,请查看此链接...
选项 2。
mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
这将根据密度给出TextSize ..
(1)I think using "dp" or "dip" for text is better than using "sp" because dp(density pixel) adjusts according to screen density. So text will look bigger on High-density devices and smaller on low-density devices.
(2) OR if you specifically want to use "sp" for text size, then you can detect the device density and then set the size of text accordingly:
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;
}
尝试这个:
像这样
android:textSize= "10sp"
sp
Scale-independent Pixels - 这类似于 dp 单位,但它也根据用户的字体大小偏好进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好进行调整。
最好使用不同的值,请看一下-
更多看看
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
或者
http://developer.android.com/guide/practices/screens_support.html
您可以使用任何尺寸,该市场基于屏幕的物理尺寸。比所有设备上的文本都具有相同的物理大小。
下面的代码使用用户的系统字体大小设置调整 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);
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);
}
对于 textSize,谷歌建议使用 'sp' 而不是 'dp'
检查此链接 http://developer.android.com/design/style/typography.html
并且为了支持多个屏幕的字体大小,您应该为每个屏幕大小创建新资源 http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Android 项目结构固有地允许通过在 dimens.xml 文件中定义支持的屏幕尺寸来指定不同的字体大小 (SP) 和边距值 (DP)。但是仍然存在的问题是 - 要使用什么值?UX 设计师通常只为一组(例如 360x640 DP 屏幕尺寸)提供样式指南,而不提供所有其他受支持的屏幕尺寸。因此,为其他受支持的屏幕尺寸使用正确的值的问题仍然没有得到解决。
一个好的解决方案(根据我的理解)是使用dimens.xml 文件的现成可扩展字典,类似于该库提供的文件字典。将这些 xml 文件添加到项目后,您只需使用布局中的键,然后 Android 会自动使用相应目录中的字体/边距值。请参阅此处了解视觉差异 - 使用和不使用这种方法。
TextView tv = new TextView(context); tv.setText("Hello World");
// 值是缩放像素 (SP) tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
// 值为设备独立像素 (DIP) tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f);
// 值为原始像素 (PX) tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f);
// 值以点为单位 (PT) tv.setTextSize(TypedValue.COMPLEX_UNIT_PT, 20f);
// 值以毫米 (MM) 为单位 tv.setTextSize(TypedValue.COMPLEX_UNIT_MM, 20f);
// 值以英寸 (IN) 为单位 tv.setTextSize(TypedValue.COMPLEX_UNIT_IN, 20f);