文字大小与不同的分辨率

时间:2012-09-27 11:28:26

标签: android android-layout text resolution

我正在使用星系标签1,7英寸hdpi和星系标签加,7英寸hdpi但分辨率更高,在我的应用中,文本可以在星系标签中读取,但在星系标签加上有太多小。 我使用sp字体大小和布局大。任何的想法?感谢

12 个答案:

答案 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资源。所以我建议你做以下事情:

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

答案 2 :(得分:14)

您只需要创建与密度或屏幕大小相关的不同文件夹 像

选项1。

values-large
values-small
values-normal

有关详细说明,请查看此链接...

Multiple Screen Support

选项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)

答案 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' enter image description here

chcek这个链接 http://developer.android.com/design/style/typography.html

并且为了支持多个屏幕的字体大小,您应该为每个屏幕大小创建新资源 http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

答案 10 :(得分:0)

简而言之,您可以使用scalable DPscalable 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);