অ্যান্ড্রয়েডে স্ট্রিং প্রস্থ কীভাবে পাবেন?


উত্তর:


201

আপনি getTextBounds(String text, int start, int end, Rect bounds)পেইন্ট অবজেক্টের পদ্ধতিটি ব্যবহার করতে পারেন । আপনি হয় কোনও দ্বারা সরবরাহিত পেইন্ট অবজেক্টটি ব্যবহার করতে পারেন TextViewবা নিজের কাঙ্ক্ষিত পাঠ্যের উপস্থিতি দিয়ে নিজেকে তৈরি করতে পারেন।

একটি পাঠ্যদর্শন ব্যবহার করে আপনি নিম্নলিখিতগুলি করতে পারেন:

Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int height = bounds.height();
int width = bounds.width();

5
@ ফ্র্যাঙ্ক: স্ট্রিংটি স্প্যানড স্ট্রিং হলে কী হবে?
আশ্বিন

দুর্দান্ত উত্তর। উপায় দ্বারা, কল করা হলে ফলাফল আরও নির্ভুল হবে textView.setTextSize()
li2

81

আপনার যদি প্রস্থের প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন:

float width = paint.measureText(string);

http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)


4
এছাড়াও, আপনি যদি কোনও নির্দিষ্ট ফন্টের আকারে পাঠ্যটি পরিমাপ করতে চান তবে আপনি ব্যবহার করতে পারেন TextPaint paint = new TextPaint(); paint.setTextSize(textSize);textSizeপিক্সেল হয়।
নাথান রিলাইন

এবং উচ্চতা পাওয়ার জন্য?
যুবরাজ

19

একটি পাঠ্যের জন্য দুটি পৃথক প্রস্থের ব্যবস্থা রয়েছে। একটি হ'ল পিক্সেলের সংখ্যা যা প্রস্থে অঙ্কিত হয়েছে, অন্যটি 'পিক্সেল' সংখ্যাটি পাঠানোর পরে কার্সারটি উন্নত করা উচিত।

color.measureText এবং color.getTextWidths পিক্সেলের সংখ্যা (ফ্লোটে) প্রদান করে যা প্রদত্ত স্ট্রিং আঁকার পরে কার্সারটি অগ্রসর হওয়া উচিত। পেইন্টেড পিক্সেলের সংখ্যার জন্য পেইন্ট ব্যবহার করুন। আমি বিশ্বাস করি এটিকে ফন্টের 'অগ্রিম' বলা হয়।

কিছু ফন্টের জন্য এই দুটি পরিমাপ আলাদা হয় (অনেকগুলি) উদাহরণস্বরূপ, ব্ল্যাক চ্যানসারি হরফ হরফগুলিতে অন্যান্য অক্ষর (ওভারল্যাপিং) প্রসারিত অক্ষর রয়েছে - রাজধানী 'এল' দেখুন। পিক্সেল আঁকা পেতে অন্যান্য উত্তরে উল্লিখিত হিসাবে পেইন্ট.জেটেক্সটবাউন্ডগুলি ব্যবহার করুন ।


6

আমি এইভাবে প্রস্থ পরিমাপ করেছি:

String str ="Hiren Patel";

Paint paint = new Paint();
paint.setTextSize(20);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(str, 0, str.length(), result);

Log.i("Text dimensions", "Width: "+result.width());

এটি আপনাকে সাহায্য করবে।


3

সম্ভবত আপনি প্রদত্ত ফন্টের (যেমন একটি Typeface"সানড-সেরিফ" ফন্ট পরিবার হিসাবে একটি BOLD_ITALIC শৈলীর একটি নির্দিষ্ট আকার এবং এসপি বা পিক্সে নির্দিষ্ট আকার) দিয়ে রঙের নির্দিষ্ট স্ট্রিংয়ের জন্য আঁকা মাত্রাগুলি জানতে চান likely

পুরো-ফুলে ফুলে উঠার পরিবর্তে TextViewআপনি নিম্ন স্তরে যেতে পারেন এবং একক-লাইন পাঠ্যের Paintজন্য সরাসরি কোনও অবজেক্টের সাথে কাজ করতে পারেন , উদাহরণস্বরূপ:

// Maybe you want to construct a (possibly static) member for repeated computations
Paint paint = new Paint();

// You can load a font family from an asset, and then pick a specific style:
//Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); 
//Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD);
// Or just reference a system font:
paint.setTypeface(Typeface.create("sans-serif",Typeface.BOLD));

// Don't forget to specify your target font size. You can load from a resource:
//float scaledSizeInPixels = context.getResources().getDimensionPixelSize(R.dimen.mediumFontSize);
// Or just compute it fully in code:
int spSize = 18;
float scaledSizeInPixels = TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_SP,
            spSize,
            context.getResources().getDisplayMetrics());
paint.setTextSize(scaledSizeInPixels);

// Now compute!
Rect bounds = new Rect();
String myString = "Some string to measure";
paint.getTextBounds(myString, 0, myString.length(), bounds);
Log.d(TAG, "width: " + bounds.width() + " height: " + bounds.height());



জন্য বহু-লাইন বা দৃশ্যও টেক্সট ( SpannedString), একটি ব্যবহারের বিষয়ে বিবেচনা StaticLayoutযার মাধ্যমে আপনি প্রস্থ এবং উচ্চতা আহরণ। এটি করতে একটি কাস্টম ভিউতে ক্যানভাসে পাঠ্য মাপতে এবং আঁকার বিষয়ে খুব বিস্তৃত উত্তরের জন্য দেখুন: https://stackoverflow.com/a/41779935/954643

অগ্রিম প্রস্থের তুলনায় আঁকা পিক্সেল সম্পর্কে @ আরবার্গের জবাবটিও লক্ষণীয় ("পিক্সেলের সংখ্যা (ফ্লোটে) যা কার্সারকে প্রদত্ত স্ট্রিং আঁকার পরে উন্নত করা উচিত"), যদি আপনার এটির সাথে ডিল করতে হয় তবে।


2

আমি স্থির শ্রেণীর ব্যবহারের সাথে টানা টেক্সটের সঠিক প্রস্থ ( ) এর আরও ভাল উপায় (আরও বহুমুখী তারপরে বর্তমান স্বীকৃত উত্তর) ভাগ করতে চাই :StringStaticLayout

StaticLayout.getDesiredWidth(text, textPaint))

এই পদ্ধতিটি আরও সঠিক textView.getTextBounds(), যেহেতু আপনি একটি একক লাইনের প্রস্থ একাধিক লাইনে গণনা করতে পারেন TextViewবা আপনি এটি ব্যবহার TextViewকরতে নাও ব্যবহার করতে পারেন (উদাহরণস্বরূপ কাস্টম Viewবাস্তবায়নে)।

এই উপায়ে অনুরূপ textPaint.measureText(text), তবে এটি বিরল ক্ষেত্রে আরও সঠিক বলে মনে হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.