আপনার প্রয়োজনীয়তার উপর নির্ভর করে উচ্চতা পরিমাপ করার বিভিন্ন উপায় রয়েছে।
আপনি যদি কিছু সংক্ষিপ্ত পরিমাণ স্থির পাঠ্য ঠিকঠাক করে কেন্দ্র করার মতো কিছু করে থাকেন তবে আপনি সম্ভবত এটি চান getTextBounds
। আপনি এ জাতীয় সীমাবদ্ধ আয়তক্ষেত্র পেতে পারেন
Rect bounds = new Rect();
mTextPaint.getTextBounds(mText, 0, mText.length(), bounds);
int height = bounds.height();
যেমন আপনি নীচের চিত্রগুলি দেখতে পাচ্ছেন, বিভিন্ন স্ট্রিং বিভিন্ন উচ্চতা দেবে (লাল দেখায়))
এই ভিন্ন ভিন্ন উচ্চতা কিছু পরিস্থিতিতে অসুবিধা হতে পারে যখন আপনার কেবল পাঠ্য যাই হোক না কেন স্থির উচ্চতার প্রয়োজন height পরবর্তী বিভাগ দেখুন।
আপনি ফন্টের মেট্রিক থেকে ফন্টের উচ্চতা গণনা করতে পারেন। উচ্চতা সর্বদা একই থাকে কারণ এটি ফন্ট থেকে প্রাপ্ত হয়, কোনও নির্দিষ্ট পাঠ্য স্ট্রিং নয়।
Paint.FontMetrics fm = mTextPaint.getFontMetrics();
float height = fm.descent - fm.ascent;
বেসলাইনটি সেই রেখা যেখানে পাঠ্যটি বসেছে। উত্থান সাধারণত একটি চরিত্র লাইন নীচে যেতে হবে এবং আরোহণ সাধারণত একটি চরিত্র লাইন উপরে যেতে হবে সবচেয়ে দীর্ঘ। উচ্চতা পেতে আপনাকে আরোহণ বিয়োগ করতে হবে কারণ এটি একটি নেতিবাচক মান। ( বেসলাইনটি হ'ল y=0
এবং y
পর্দাটি সরিয়ে দেয়))
নীচের চিত্রটি দেখুন। উভয় স্ট্রিংয়ের উচ্চতা 234.375
।
আপনি যদি কেবল পাঠ্যের উচ্চতার চেয়ে লাইনের উচ্চতা চান তবে আপনি নিম্নলিখিতটি করতে পারেন:
float height = fm.bottom - fm.top + fm.leading; // 265.4297
এই লাইন bottom
এবং top
এর হয়। শীর্ষস্থানীয় (ইন্টারলাইন স্পেসিং) সাধারণত শূন্য হয় তবে আপনার এটি যাইহোক যোগ করা উচিত।
উপরের চিত্রগুলি এই প্রকল্প থেকে আসে । ফন্ট মেট্রিক্স কীভাবে কাজ করে তা দেখতে আপনি এটির সাথে চারপাশে খেলতে পারেন।
মাল্টি-লাইন পাঠ্যের উচ্চতা পরিমাপের জন্য আপনার একটি ব্যবহার করা উচিত StaticLayout
। আমি এই উত্তরে এ সম্পর্কে কিছুটা বিশদ আলোচনা করেছি , তবে এই উচ্চতাটি পাওয়ার প্রাথমিক উপায়টি হ'ল:
String text = "This is some text. This is some text. This is some text. This is some text. This is some text. This is some text.";
TextPaint myTextPaint = new TextPaint();
myTextPaint.setAntiAlias(true);
myTextPaint.setTextSize(16 * getResources().getDisplayMetrics().density);
myTextPaint.setColor(0xFF000000);
int width = 200;
Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL;
float spacingMultiplier = 1;
float spacingAddition = 0;
boolean includePadding = false;
StaticLayout myStaticLayout = new StaticLayout(text, myTextPaint, width, alignment, spacingMultiplier, spacingAddition, includePadding);
float height = myStaticLayout.getHeight();