17

我正在使用galaxy tab 1、7inch hdpi和galaxy tab plus、7 inch hdpi但分辨率更高,在我的应用程序中,可以在galaxy tab中很好地阅读文本,但在galaxy tab plus中有太多的小。我在字体大小和布局中使用 sp。任何想法?谢谢

4

12 回答 12

34

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

TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
于 2012-09-27T11:40:50.203 回答
19

根据硬件规格,Galaxy Tab 1 是 MDPI 设备,但由于它使用 Android 2.x,三星以编程方式将其设置为使用 HDPI 资源。所以我可以建议你做到以下几点:

  1. dimens.xmlvalues目录中创建文件。
  2. 放在那里<dimen name="font_size">30sp</dimen>。这是默认字体大小。
  3. dimens.xmlvalues-large目录中创建文件。
  4. 放在那里<dimen name="font_size">20sp</dimen>。这是 Galaxy Tab 1 的字体大小。
  5. dimens.xmlvalues-sw600dp目录中创建文件。
  6. 放在那里<dimen name="font_size">30sp</dimen>。这是其他搭载 Android 3.x 及更高版本的平板电脑的字体大小。
  7. 在布局中指定android:textSize="@dimens/font_size"
于 2012-09-27T11:40:23.477 回答
16

您只需要创建与密度或屏幕尺寸相关的不同文件夹,例如

选项1。

values-large
values-small
values-normal

有关更多说明,请查看此链接...

多屏支持

选项 2。

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

这将根据密度给出TextSize ..

于 2012-09-27T11:37:26.817 回答
4

(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; 
    } 
于 2012-09-28T07:43:57.690 回答
4

尝试这个:

像这样

android:textSize= "10sp"

sp

Scale-independent Pixels - 这类似于 dp 单位,但它也根据用户的字体大小偏好进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好进行调整。

于 2012-09-27T11:38:14.520 回答
2

您可以使用任何尺寸,市场基于屏幕的物理尺寸。比所有设备上的文本都具有相同的物理大小。

于 2012-09-27T11:35:44.603 回答
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);
于 2015-12-18T22:15:14.337 回答
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);
    }
于 2014-08-07T06:12:14.387 回答
0

对于 textSize,谷歌建议使用 'sp' 而不是 'dp' 在此处输入图像描述

检查此链接 http://developer.android.com/design/style/typography.html

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

于 2013-12-25T03:52:17.600 回答
0

简而言之,您可以利用可扩展的 DP可扩展的字体方法。

Android 项目结构固有地允许通过在 dimens.xml 文件中定义支持的屏幕尺寸来指定不同的字体大小 (SP) 和边距值 (DP)。但是仍然存在的问题是 - 要使用什么值?UX 设计师通常只为一组(例如 360x640 DP 屏幕尺寸)提供样式指南,而不提供所有其他受支持的屏幕尺寸。因此,为其他受支持的屏幕尺寸使用正确的值的问题仍然没有得到解决。

一个好的解决方案(根据我的理解)是使用dimens.xml 文件的现成可扩展字典,类似于库提供的文件字典。将这些 xml 文件添加到项目后,您只需使用布局中的键,然后 Android 会自动使用相应目录中的字体/边距值。请参阅此处了解视觉差异 - 使用和不使用这种方法。

于 2017-05-28T07:57:53.113 回答
0

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);

于 2018-10-20T08:40:11.353 回答