我正在使用星系标签1,7英寸hdpi和星系标签加,7英寸hdpi但分辨率更高,在我的应用中,文本可以在星系标签中读取,但在星系标签加上有太多小。 我使用sp字体大小和布局大。任何的想法?感谢
答案 0 :(得分:33)
如果您想以编程方式设置大小,这应该对您有所帮助。文本将在每个设备上以相同的大小显示
TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
答案 1 :(得分:19)
根据硬件规格,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"
答案 2 :(得分:14)
您只需要创建与密度或屏幕大小相关的不同文件夹 像
选项1。
values-large
values-small
values-normal
有关详细说明,请查看此链接...
选项2。
mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
这将根据密度提供 TextSize 。
答案 3 :(得分:4)
试试这个:
像这样android:textSize= "10sp"
<强>属强>
与比例无关的像素 - 这就像dp单位,但它也是 按用户的字体大小首选项缩放。建议你使用 指定字体大小时,此单位将进行调整 屏幕密度和用户偏好。
答案 4 :(得分:4)
(1)我认为对文本使用“dp”或“dip”比使用“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;
}
答案 5 :(得分:2)
您可以使用任何this尺寸,根据屏幕的物理尺寸推销。比所有设备上的文本都具有相同的物理尺寸。
答案 6 :(得分:2)
最好使用不同的值,请看看 -
Different values folders in android
了解更多信息
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
basics of device-independent-pixels
OR
http://developer.android.com/guide/practices/screens_support.html
答案 7 :(得分: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);
答案 8 :(得分:1)
TextView headerTextView(String label){
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);
}
答案 9 :(得分:0)
对于textSize,谷歌建议使用'sp'而不是'dp'
chcek这个链接 http://developer.android.com/design/style/typography.html
并且为了支持多个屏幕的字体大小,您应该为每个屏幕大小创建新资源 http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
答案 10 :(得分:0)
简而言之,您可以使用scalable DP和scalable Font方法。
Android项目结构本身允许通过在dimens.xml文件中为支持的屏幕尺寸定义它们来指定不同的字体大小(SP)和边距值(DP)。但仍然存在的问题是 - 要使用什么价值? UX设计师通常只为一组(例如360x640 DP屏幕尺寸)提供样式指南,并且不提供所有其他支持的屏幕尺寸。因此,对其他支持的屏幕尺寸使用正确的值的问题仍然没有答案。
一个好的解决方案(根据我的说法)是使用现成的dimens.xml文件的可缩放字典,类似于this库提供的文件字典。将这些xml文件添加到项目后,您只需要使用布局中的键,然后Android会自动使用各个目录中的字体/边距值。无论有没有这种方法,请参考here的视觉差异。
答案 11 :(得分:0)
TextView tv =新的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);