2011-09-15 68 views
4

我正在测量字符串文本以查看是否应为包装添加'\ n'。android将文本宽度(以像素为单位)转换为屏幕宽度/高度的百分比

我使用Paint.measureText功能,它工作的大部分时间,但它发生,我认为这是不准确的,因为一个像素不等于一个DP - 我在网上看到如何转换像素DP,而是我宁愿做的是转换像素屏幕大小的例如

如果“A”为8个像素宽的百分比,我如何说

float LetterWidthPercent = _______ //get width of character in percent of screen width 
float LetterHeightPercent = _______ //get height of character in percent of screen height 

这样我只能看到

if (LineOfTextWidth >= ScreenWidth * 0.9f) //90% 

这将是一个非常有用的功能,方便。

+0

@CrandellWS帮助我理解,你究竟想从这个问题到底究竟是什么?是不是只是通过getWindowManager()。getDefaultDisplay()。getMetrics(度量))来计算屏幕宽度并将测量的文本宽度除以它? (关于你提到的你自己的问题,只需根据'dp'的屏幕宽度设置fontSize) –

+0

我试图吸引人们关注我自己的问题 - > http://stackoverflow.com/questions/35117278/canvas-drawtext -with-pixel-perfect-t在画布上,我解决了这个问题,您可以使用该解决方案为此问题创建答案。声誉对我来说不是非常重要,所以请随时收集简单的50 ... – CrandellWS

+1

@GideonKain你可以使用布局百分比支持库,并可以给小部件提供百分比。你可以在这里查看样品。 http://www.androidauthority.com/using-the-android-percent-support-library-630715/ – androidnoobdev

回答

0

您可以使用以下方法将do转换为像素和像素为dp。

转换DP像素:

public int dpToPixel(int dp) { 
    DisplayMetrics dm= getContext().getResources().getDisplayMetrics(); 
    int pixel = Math.round(dp * (dm.xdpi/DisplayMetrics.DENSITY_DEFAULT));  
    return pixel 
} 

转换像素DP:

public int pixelToDp(int pixel) { 
    DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); 
    int dp = Math.round(pixel/(dm.xdpi/DisplayMetrics.DENSITY_DEFAULT)); 
    return dp; 
} 
+0

您将需要使用边界来获取像素的高度和宽度 – CrandellWS

+0

尝试重新处理您的答案也许这将有助于http: //堆栈溢出。com/a/35193695/1815624 – CrandellWS

1

您需要通过DisplayMetrics还是怎么过让屏幕宽度...

为了得到字符大小使用带边界的绘画进行计算。

characterWidth/screenWidth = characterScreenPercentage

我做了一个双,但你可以很容易地将其更改为浮动。

对于人物:

public Double characterToScreenWidthPercentage(Character c) { 
    Paint paint = new Paint(); 
    Rect boundA = new Rect(); 
    DisplayMetrics metrics = new DisplayMetrics(); 
    ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)) 
      .getDefaultDisplay().getMetrics(metrics); 
    paint.getTextBounds(Character.toString(c), 0, 1, boundA); 
    Log.v("fn", Integer.toString(boundA.width())); 
    Log.v("fn", Integer.toString(metrics.widthPixels)); 
    Log.v("fn", Double.toString((float) boundA.width()/(float) metrics.widthPixels)); 
    return ((double) boundA.width()/(double) metrics.widthPixels); 
} 

对于字符串:

public Double stringToScreenWidthPercentage(String str) { 
    Paint paint = new Paint(); 
    Rect boundA = new Rect(); 
    DisplayMetrics metrics = new DisplayMetrics(); 
    ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)) 
      .getDefaultDisplay().getMetrics(metrics); 
    paint.getTextBounds(str, 0, 1, boundA); 
    Log.v("fn", Integer.toString(boundA.width())); 
    Log.v("fn", Integer.toString(metrics.widthPixels)); 
    Log.v("fn", Double.toString((float) boundA.width()/(float) metrics.widthPixels)); 
    return ((double) boundA.width()/(double) metrics.widthPixels); 
} 
1
public static double measureWeightPercent(Context context, String textToMeasure) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) 
      .getDefaultDisplay().getMetrics(metrics); 

    TextView view = new TextView(context); 
    view.setText(textToMeasure); 
    view.measure(metrics.widthPixels, metrics.heightPixels); 

    double textWidth = view.getMeasuredWidth(); 

    return textWidth/(metrics.widthPixels/100); 
} 

可以测量与绘制的文本是在屏幕上一个TextView里面之前(或代替)。通过这种方式,您可以为TextView设置任何字体或textSize,并始终知道文本在屏幕上有多少百分比。

+0

很好的答案,那会比我的建议更有用,更好的资源。 – CrandellWS

相关问题