文字列のwidthをピクセルで取得する方法を知りたい
String
の幅を測定するには、Font
を使用してbounds
のString
を取得し、描画します。
_BitmapFont.getBounds(String str).width
_
描画のための適切なオフセットの高さも取得できます。幅を高さに置き換えるだけです。
さらに、複数行のテキストの場合は、getMultiLineBounds(someString).width
を使用して境界を取得します。
BitmapFont APIは1.5.7で変更されたため、境界を取得する別の方法があります。
BitmapFont.TextBoundsとgetBoundsが実行されます。代わりに、文字列をGlyphLayoutに渡し、その幅と高さフィールドを使用して境界を取得します。次に、同じGlyphLayoutをBitmapFontに渡すことでテキストを描画できます。これは、グリフを以前のように2回レイアウトする必要がないことを意味します。
例:
_GlyphLayout layout = new GlyphLayout(); //dont do this every frame! Store it as member
layout.setText("meow");
float width = layout.width;// contains the width of the current set text
float height = layout.height; // contains the height of the current set text
_
@ネイツの回答によると: https://stackoverflow.com/a/20759876/61967 呼び出しメソッド
BitmapFont.getBounds(String str).width
常に適切な幅を返すわけではありません!特にフォントを再利用する場合に。 in the center of part of view port
などのテキストを描画する場合は、別の方法を使用してこの問題を回避できます
BitmapFont.drawWrapped(...)
コード例:
font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER);
UIでスキンを使用する場合、GlyphLayoutにフィードする正しいフォントを見つけるのは面倒です。
この場合、Labelの使い捨てインスタンスを使用してすべてを理解し、Labelに幅を要求します。
Skin skin = getMySkin();
Label cellExample = new Label("888.88888", skin);
cellExample.layout();
float cellWidth = cellExample.getWidth();
Table table = new Table(skin);
table.defaults().width(cellWidth);
// fill table width cells ...
テキストを自分で配置したい場合、これは答えではありませんが、UIレイアウトを安定させ、セルの実際のコンテンツにあまり依存しないようにするのに役立ちます。