Android Question MeasureStringWidth - what is the factor?

tdocs2

Well-Known Member
Licensed User
Greetings, all.

Thank you for your replies.

In the code below:

B4X:
        MenuTextSize=CanvasMenu.MeasureStringWidth(MList.Get(i),Typeface.DEFAULT,20) 'in dpi not dip
The result is in dpi and not in dip.

The question is, what factor is used for the computation of width in dpi?

Is it from xdpi (see ExactSize - code from Erel):

B4X:
Sub ExactSize As Double
  Dim r As Reflector
  r.Target = r.GetContext
  r.Target = r.RunMethod("getResources")
  r.Target = r.RunMethod("getDisplayMetrics")
  xdpi = r.GetField("xdpi")
  ydpi = r.GetField("ydpi") 
  'Return Sqrt(Power(100%x / xdpi, 2) + Power(100%y / ydpi, 2))
  Return Sqrt((100%x / xdpi)*(100%x / xdpi) + (100%y / ydpi)*(100%y / ydpi))
End Sub
or is it from:

B4X:
Sub GetDevicePhysicalSize As Float
lv = GetDeviceLayoutValues
Log(GetDeviceLayoutValues)
Return Sqrt(Power(lv.Height, 2) + Power(lv.Width, 2)) / lv.Scale / 160

End Sub
In some cases, the factor is the same, but in the majority of cases (at least, in what I have seen), the xdpi is different than the scale (most of the time smaller).

Best regards.

Sandy
 

klaus

Expert
Licensed User
Just for clarification - xdpi = pixel?
No.
dpi = dots per inch
xdpi means x dots per inch horizontally = x pixels per inch horizontally.
 

tdocs2

Well-Known Member
Licensed User
Thank you, Klaus.

I did not properly ask the question, but I received the answer I was looking for. I meant to ask if the pixel is the dot in dpi - and it is.

Sandy
 
Top