আমি পাঠ্যটি ব্যবহার করে মাপছি Paint.getTextBounds()
, যেহেতু আমি লেখার উচ্চতা এবং প্রস্থ উভয়ই রেন্ডার করতে আগ্রহী। যাইহোক, আসল টেক্সট অনুষ্ঠিত সবসময় একটু বেশি চওড়া হয় .width()
এর Rect
দ্বারা ভর্ত্তি তথ্য getTextBounds()
।
আমার অবাক করে দিয়েছি, আমি পরীক্ষা করে .measureText()
দেখেছি যে এটি আলাদা (উচ্চতর) মান দেয়। আমি চেষ্টা করে দেখেছি এবং এটি সঠিক খুঁজে পেয়েছি।
কেন তারা বিভিন্ন প্রস্থের রিপোর্ট করে? আমি কীভাবে উচ্চতা এবং প্রস্থটি সঠিকভাবে পেতে পারি? আমি বোঝাতে চাইছি, আমি ব্যবহার করতে পারি.measureText()
তবে তারপরে .height()
ফিরে আসা লোকদের উপর আমার বিশ্বাস করা উচিত কিনা তা আমি জানতে পারি না getTextBounds()
।
অনুরোধ হিসাবে, সমস্যাটি পুনরুত্পাদন করার জন্য এখানে ন্যূনতম কোড রয়েছে:
final String someText = "Hello. I believe I'm some text!";
Paint p = new Paint();
Rect bounds = new Rect();
for (float f = 10; f < 40; f += 1f) {
p.setTextSize(f);
p.getTextBounds(someText, 0, someText.length(), bounds);
Log.d("Test", String.format(
"Size %f, measureText %f, getTextBounds %d",
f,
p.measureText(someText),
bounds.width())
);
}
আউটপুটটি দেখায় যে পার্থক্যটি কেবলমাত্র 1 এর চেয়ে বেশি (এবং শেষ মুহুর্তের কোনও রাউন্ডিং ত্রুটি নয়) আকারে বাড়তে পারে বলে মনে হয় (আমি আরও সিদ্ধান্তে পৌঁছতে চলেছি, তবে এটি সম্পূর্ণ ফন্ট-নির্ভর হতে পারে):
D/Test ( 607): Size 10.000000, measureText 135.000000, getTextBounds 134
D/Test ( 607): Size 11.000000, measureText 149.000000, getTextBounds 148
D/Test ( 607): Size 12.000000, measureText 156.000000, getTextBounds 155
D/Test ( 607): Size 13.000000, measureText 171.000000, getTextBounds 169
D/Test ( 607): Size 14.000000, measureText 195.000000, getTextBounds 193
D/Test ( 607): Size 15.000000, measureText 201.000000, getTextBounds 199
D/Test ( 607): Size 16.000000, measureText 211.000000, getTextBounds 210
D/Test ( 607): Size 17.000000, measureText 225.000000, getTextBounds 223
D/Test ( 607): Size 18.000000, measureText 245.000000, getTextBounds 243
D/Test ( 607): Size 19.000000, measureText 251.000000, getTextBounds 249
D/Test ( 607): Size 20.000000, measureText 269.000000, getTextBounds 267
D/Test ( 607): Size 21.000000, measureText 275.000000, getTextBounds 272
D/Test ( 607): Size 22.000000, measureText 297.000000, getTextBounds 294
D/Test ( 607): Size 23.000000, measureText 305.000000, getTextBounds 302
D/Test ( 607): Size 24.000000, measureText 319.000000, getTextBounds 316
D/Test ( 607): Size 25.000000, measureText 330.000000, getTextBounds 326
D/Test ( 607): Size 26.000000, measureText 349.000000, getTextBounds 346
D/Test ( 607): Size 27.000000, measureText 357.000000, getTextBounds 354
D/Test ( 607): Size 28.000000, measureText 369.000000, getTextBounds 365
D/Test ( 607): Size 29.000000, measureText 396.000000, getTextBounds 392
D/Test ( 607): Size 30.000000, measureText 401.000000, getTextBounds 397
D/Test ( 607): Size 31.000000, measureText 418.000000, getTextBounds 414
D/Test ( 607): Size 32.000000, measureText 423.000000, getTextBounds 418
D/Test ( 607): Size 33.000000, measureText 446.000000, getTextBounds 441
D/Test ( 607): Size 34.000000, measureText 455.000000, getTextBounds 450
D/Test ( 607): Size 35.000000, measureText 468.000000, getTextBounds 463
D/Test ( 607): Size 36.000000, measureText 474.000000, getTextBounds 469
D/Test ( 607): Size 37.000000, measureText 500.000000, getTextBounds 495
D/Test ( 607): Size 38.000000, measureText 506.000000, getTextBounds 501
D/Test ( 607): Size 39.000000, measureText 521.000000, getTextBounds 515