基于Android Fonttype在纯Java中查找精确的Fonttype

基于Android Fonttype在纯Java中查找精确的Fonttype,java,android,fonts,Java,Android,Fonts,我需要在Android和纯Java中测量特定字体中文本的大小,它需要完全相同的大小。我知道如何在Android和Java中测量字体大小,但我意识到,测量方法是不同的 显示问题的代码: 在安卓系统中,我的尺寸是35.0/10.0 paint.setTypeface(Typeface.SANS_SERIF); Rect bounds = new Rect(); paint.getTextBounds("L y d i a n", 0, sText.length(), bou

我需要在Android和纯Java中测量特定字体中文本的大小,它需要完全相同的大小。我知道如何在Android和Java中测量字体大小,但我意识到,测量方法是不同的

显示问题的代码:

在安卓系统中,我的尺寸是35.0/10.0

    paint.setTypeface(Typeface.SANS_SERIF);

    Rect bounds = new Rect();
    paint.getTextBounds("L y d i a n", 0, sText.length(), bounds);
    float textwidth = bounds.width();   //35.0
    float textheight = bounds.height(); //10.0
在纯Java中,我得到的大小是34.0/10.0

float textwidth = getTextWidth("L y d i a n", (int)fTextSize, "Sans");      //34.0
float textheight = getTextHeight("L y d i a n", (int)fTextSize, "Sans");    //10.0


public float getTextWidth(String text, int FontSize, String Fonttype){
    AffineTransform affinetransform = new AffineTransform();     
    FontRenderContext frc = new FontRenderContext(affinetransform,true,true);     
    Font font = new Font(Fonttype, Font.PLAIN, FontSize);
    int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
    return textwidth;
}

我正在平板电脑上测试Android代码片段,在我的电脑上测试JavaAWT代码片段

我确信我没有使用相同的字体,但我看不出问题所在。Java中的“sans”与Android中的sans_SERIF相同吗?我希望有人能理解测量差异的原因


有人能帮忙吗?

Android是Java,所以如果你需要相同的结果,基本概念是“使用相同的代码”。。。因此,我不太理解您的问题,您有什么原因不能使用纯Java代码吗?话虽如此,你得到的是纯的、干净的整数值,而不是小数点,这一事实是非常值得怀疑的:它们可能都做了错误的事情,如果减1,则表明它们的取整方式不同。谢谢,但这不是取整问题。“Android就是Java”我当然知道,但是如果不使用Android和纯Java这两个术语,我该如何解释这个问题呢。如果你复制这两个操作系统的代码,你就会发现问题。。。。我需要完全相同的结果为相同的字体。但很明显,Android OS JVM呈现相同字体的方式不同于“纯Java”JVM。这就是JVML“Java”和“Dalvik”之间的区别,或者是API之间的区别,在这种情况下是“Android”和“Java AWT”(至少在这种情况下,因为您使用的是AWT字体类)。这种差异很重要,因为它可以让你排除某些可能性。同样重要的是说出每个代码片段的测试内容。您是在同一台设备上进行测试(如果是,手机还是电脑上的AVD?),还是分别在手机/电脑上进行测试?我正在平板电脑上测试Android代码段,在我的电脑上测试JAVA AWT代码段。我更新了问题,使之更加准确。谢谢美好的在这里明确说明版本也是一个好主意。Android有很多版本和很多SDK版本,所以请说明平板电脑运行的是哪一个Android(版本+构建)和编译它时使用的SDK版本,并注意您使用的是哪一个Java版本(可能是JRE和JDK版本)将帮助其他可能遇到过这种情况的人确定他们过去的情况是否适用于您当前的情况。另外,您是否尝试过在平板电脑上运行普通Java代码?这与Android代码值或桌面java值一致吗?