অ্যান্ড্রয়েড টেক্সটভিউ সমর্থনযোগ্য পাঠ্য


395

আপনি কীভাবে একটি এর পাঠ্যকে TextViewন্যায়সঙ্গত হতে পারেন (বামে এবং ডানদিকে পাঠ্য ফ্লাশ সহ)?

আমি একটি সম্ভাব্য সমাধান পাওয়া এখানে , কিন্তু এটা না কাজ (এমনকি যদি আপনি, center_vertical করার উল্লম্ব কেন্দ্র পরিবর্তন ইত্যাদি)।


@Jimbo উত্তরটি সঠিক স্পষ্টভাবে জন্য কাজ করছে আমার ক্ষেত্রে উপর inputtext এবং textview বাম ইনপুট এবং প্রদর্শনে ডান দিক থেকে আরবি ভাষা কিন্তু পাঠ্য ইনপুট জন্য আমিও মাধ্যাকর্ষণ = "ডান" যোগ করতে হয়েছে
শরীফ

উত্তর:


239

আমি বিশ্বাস করি না অ্যান্ড্রয়েড পুরো ন্যায্যতা সমর্থন করে।

আপডেট 2018-01-01 : অ্যান্ড্রয়েড 8.0+ এর সাথে যুক্তিযুক্তTextView মোডগুলিকে সমর্থন করে


5
আরও বিশ্লেষণের পরে, আপনি অ্যান্ড্রয়েড দিতে পারেন: মাধ্যাকর্ষণ = "ফিল_হরিজন্টল" একটি শট। এটি হিসাবে বর্ণিত হয় "যদি প্রয়োজন হয় তবে বস্তুর অনুভূমিক আকারটি বাড়ান যাতে এটি সম্পূর্ণরূপে তার ধারকটি পূরণ করে", তবে কীভাবে তারা এই লেখাটি "বৃদ্ধি" করে তা আমি জানি না।
কমন্সওয়্যার

8
অ্যান্ড্রয়েড: মাধ্যাকর্ষণ = "ফিল_হরিজন্টল" কোনওভাবেই কাজ করে নি। দেখে মনে হচ্ছে অ্যান্ড্রয়েড সর্বোপরি ন্যায়সঙ্গততা সমর্থন করে না, ওহ ভাল :)

6
না, আপনি মহাকর্ষের মতো সম্পত্তি সেট করতে পারবেন না। তবে তবুও আপনি পাঠ্য দৃশ্যের পরিবর্তে ওয়েবভিউ গ্রহণ করে আপনার পাঠ্যের ন্যায্যতা সেট করতে পারেন। আপনি সীল.ও /2010/12/only-way-how- to- align-text-in- block-in.html উল্লেখ করতে পারেন । (থেকে চুরি stackoverflow.com/questions/5976627/... )
jcaruso

2
@ কমন্সওয়্যার এখন পাঠ্যকে ন্যায়সঙ্গত করার উপযুক্ত উপায়?
জন আর

1
ম্যান, আমি এটি অর্জনের জন্য ভারী ওয়েবভিউ নিয়ে বাস করছি, এবং বিশ্বাস করুন, আমার ইউআই এখনও কিছু নতুন স্টাফ এপিআইতে যুক্ত হওয়ার জন্য চিৎকার করে না, কারণ তালিকা তালিকায় চ্যাট করার মতো উপাদানগুলির জন্য এটি ধিক্কারজনক slow
nobleG

156

@ কমন্সওয়্যার উত্তরটি সঠিক। অ্যান্ড্রয়েড 8.0+ "সম্পূর্ণ ন্যায়বিচার" সমর্থন করে (বা কেবল "ন্যায়বিচার", যেমন এটি কখনও কখনও অস্পষ্টভাবে উল্লেখ করা হয়)।

অ্যান্ড্রয়েড "ফ্লাশ বাম / ডান পাঠ্য প্রান্তিককরণ" সমর্থন করে। পার্থক্যটির জন্য জাস্টিফিকেশন সম্পর্কিত উইকিপিডিয়া নিবন্ধটি দেখুন । অনেক লোক পূর্ণ-ন্যায্যতার পাশাপাশি বাম / ডান পাঠ্য প্রান্তিককরণকে অন্তর্ভুক্ত করার জন্য 'ন্যায়সঙ্গত' ধারণাটি বিবেচনা করে, যা তারা বাম / ডান পাঠ্য সারিবদ্ধকরণ করতে চাইলে অনুসন্ধান শেষ করে। এই উত্তরটি কীভাবে বাম / ডান পাঠ্য প্রান্তিককরণটি অর্জন করবেন তা ব্যাখ্যা করে।

ফ্লাশ বাম / ডান পাঠ্য প্রান্তিককরণ অর্জন করা সম্ভব (প্রশ্নটি যেভাবে জিজ্ঞাসা করছে, সম্পূর্ণ ন্যায়বিচারের বিপরীতে)। প্রদর্শনের জন্য আমি উদাহরণ হিসাবে একটি বেসিক 2-কলাম ফর্ম (বাম কলামে লেবেল এবং ডান কলামে পাঠ্য ক্ষেত্রগুলি) ব্যবহার করব। এই উদাহরণে বাম কলামের লেবেলের পাঠ্যটি ডান-প্রান্তযুক্ত হবে যাতে তারা ডান কলামে তাদের পাঠ্য ক্ষেত্রগুলির বিপরীতে ফ্লাশ আপ হিসাবে উপস্থিত হয়।

এক্সএমএল লেআউটে আপনি টেক্সটভিউ উপাদানগুলি নিজেরাই (বাম কলাম) সমস্ত টেক্সটভিউয়ের মধ্যে নিম্নলিখিত বৈশিষ্ট্য যুক্ত করে ডানদিকে প্রান্তিককরণ পেতে পারেন:

<TextView
   ...
   android:layout_gravity="center_vertical|end">
   ...
</TextView>

যাইহোক, যদি পাঠ্যটি একাধিক লাইনে আবৃত হয় তবে টেক্সটভিউয়ের মধ্যে পাঠ্যটি বামে প্রবাহিত হবে। নিম্নলিখিত বৈশিষ্ট্যটি যুক্ত করা টেক্সটভিউয়ের মধ্যে আসল পাঠটিকে ফ্লাশ ডানদিকে প্রান্তিক করে তোলে (র‌্যাগড বামে):

<TextView
   ...
   android:gravity="end">
   ...
</TextView>

সুতরাং মাধ্যাকর্ষণ বৈশিষ্ট্যটি টেক্সটভিউ বিন্যাসের অভ্যন্তরে পাঠ্যকে কীভাবে প্রান্তিককরণ করতে হবে তা উল্লেখ করে_গ্রাভিটি নির্দিষ্ট করে কীভাবে টেক্সটভিউ উপাদানটিকে বিন্যস্ত / বিন্যাস করতে হয়।


12
যদি আমি সঠিকভাবে বুঝতে পারি এবং এটির পরীক্ষার ফলাফলগুলি দেওয়া হয় তবে এই সমস্তগুলি হ'ল পাঠ্যটি বাম বা ডানদিকে সাজান। এটি পাঠ্যকে ন্যায়সঙ্গত করে না, তাই না?
পল ল্যামার্টসমা

14
চমৎকার। কেবল যুক্ত করতে, আপনি যদি কেন্দ্রের ন্যায়সঙ্গততা চান তবে আপনি এটি করতে পারেন android:layout_gravity="center_horizontal|center" android:gravity="center"
লুইস এ। ফ্লোরিট

ডান থেকে বাম ইনপুট এবং প্রদর্শনের জন্য আরবি ভাষার জন্য ইনপুটেক্সট এবং পাঠ্যদর্শন নিয়ে অবশ্যই আমার মামলার পক্ষে কাজ করছেন
শরীফ

1
এটি কেবল প্রান্তিককরণ, সমর্থনযোগ্যতা নয়। সাবধানে উইকিপিডিয়া লিঙ্কটি পড়ুন। বিভিন্ন ধরণের ন্যায়সঙ্গততার মধ্যে পার্থক্য কেবল একটি অনুচ্ছেদের শেষ লাইনে প্রভাবিত করে। অনুচ্ছেদের জন্য বাম / ডান / কেন্দ্রের ন্যায়সঙ্গততা নেই যা কেবলমাত্র একটি রেখা রয়েছে।
করু

তবে কেন এটি এখানে উত্তর দিচ্ছেন যদি এটি সম্পর্কে না হয়justify
user924

136

অ্যান্ড্রয়েডে পাঠ্যকে ন্যায়সঙ্গত করতে আমি ওয়েবউইউ ব্যবহার করেছি

    setContentView(R.layout.main);

    WebView view = new WebView(this);
    view.setVerticalScrollBarEnabled(false);

    ((LinearLayout)findViewById(R.id.inset_web_view)).addView(view);

    view.loadData(getString(R.string.hello), "text/html; charset=utf-8", "utf-8");

এবং এইচটিএমএল।

<string name="hello">
<![CDATA[
<html>
 <head></head>
 <body style="text-align:justify;color:gray;background-color:black;">
  Lorem ipsum dolor sit amet, consectetur 
  adipiscing elit. Nunc pellentesque, urna
  nec hendrerit pellentesque, risus massa
 </body>
</html>
]]>
</string>

আমি এটি প্রমাণ করার জন্য ছবিগুলি আপলোড করতে পারি না তবে "এটি আমার পক্ষে কাজ করে"।


3
এখানে দুর্দান্ত সমাধান। FWIW আপনার অতিরিক্ত HTML এর বেশিরভাগ অংশের দরকার নেই। পাঠ্য সারিবদ্ধ সহ বডি ট্যাগই যথেষ্ট।
gnac

5
এটি ভাল কাজ করে। মনে রাখবেন যে, আপনি পটভূমির অনুসরণ করে স্বচ্ছ করতে পারেন view.loadData()সঙ্গে view.setBackgroundColor("#00000000")
পল ল্যামার্টসমা

তবে আমি এটি কোনও কাস্টম ফন্ট / টাইপফেস লোড করতে সফল হইনি। আমি এই এবং এই পরামর্শটি চেষ্টা করেছি , কোনও ভাগ্য ছাড়াই।
পল ল্যামার্টসমা

2
যেমন আমি এই থ্রেডগুলিতে উল্লেখ করেছি, আমি একটি রেজোলিউশন পেয়েছি: আপনি যদি কোনও এইচটিএমএল ফাইল তৈরি করেন এবং সম্পদের মধ্যে রাখেন তবে এটি view.loadUrl()কাজের মাধ্যমে লোড করা হয় , যেখানে view.loadData()হয় না। পরেরটা কেন করায় আমার কোনও ধারণা নেই।
পল ল্যামার্টসমা

1
@ পলল্যামার্টসমা, সেটব্যাকগ্রাউন্ড কালার (0x00000000) বরং স্বচ্ছ পটভূমি সেট করার জন্য সঠিক ফর্ম্যাট হবে।
ধনী

100

আপডেট

আমরা এর জন্য একটি সাধারণ ক্লাস তৈরি করেছি। আপনি যা সন্ধান করছেন তা অর্জনের জন্য বর্তমানে দুটি পদ্ধতি রয়েছে। উভয়ের জন্য কোনও ওয়েববিউ এবং সমর্থন সরবরাহের প্রয়োজন নেই

লাইব্রেরি : https://github.com/bluejamesbond/TextJustify-Android

সমর্থন : অ্যান্ড্রয়েড 2.0 থেকে 5. এক্স

সেটআপ

// Please visit Github for latest setup instructions.

SCREENSHOT

Comparison.png


সত্যিই সহায়তা, তবে এটি ব্যবহার করে আমার টেক্সটভিউগুলি মূল ফর্ম্যাটটি রাখে না, আমি রেফার করি: মার্জিন, পাঠ্য শৈলী এবং আমি মনে করি যে পাঠ্যের আকারটিও নয়, প্লিজ এতে কাজ চালিয়ে যাচ্ছেন, এটি সত্যই দুর্দান্ত সাহায্য হওয়া উচিত
লিওনার্দো সাপ্য

আচ্ছা আমি এই ক্লাস প্রতিষ্ঠা করতে পারি না। তাদের একটির কোনও প্যাকেজ নাম নেই, অন্যটি কিছু হলুদ ত্রুটি দেয়। আসলে আমি বিশ্বাস করতে পারি না।
মেহমেট

খুব ভাল, কিন্তু আমি এখনও এই লাইব্রেরিটি ব্যবহার করে পাঠ্যে কোনও ফর্ম্যাট যুক্ত করতে জানি না।
সিমেন্টিয়ার

4
এই দুর্দান্ত ভাগ করা লাইব্রেরির জন্য ধন্যবাদ, তবে এটি পার্সিয়ান বা আরবিক পাঠ্যকে সমর্থন করতে পারে না। আমি যখন নির্দেশ সেট করি তখন আমার শব্দটি শেষ থেকে শুরু না করে শেষ থেকে শুরু করে। আমি এটির অর্থ: আমার শব্দটি এটি: "سلام" এবং এর মতো এটির মতো: "مالس"। (আপনি যদি পার্সিয়ান বুঝতে না চান তবে এই উদাহরণটি দেখুন: আমাকে "1234" -> "4321")
নারুটো উজুমাকি

1
স্ক্রোলভিউয়ের উপর ভিত্তি করে ... দুর্দান্ত সমাধান তবে পাঠ্যদর্শন দিয়ে এটি প্রতিক্রিয়াশীল করে এমন কোনও উত্তর খুঁজে পাচ্ছেন না। :(
ইউজার

88

TextViewইন Android Oপুরো ন্যায়সঙ্গততা (নতুন টাইপোগ্রাফিক প্রান্তিককরণ) নিজেই অফার।

আপনার কেবল এটি করা দরকার:

Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    textView.justificationMode = JUSTIFICATION_MODE_INTER_WORD
}

জাভা

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    textView.setJustificationMode(JUSTIFICATION_MODE_INTER_WORD);
}

ডিফল্ট হয় JUSTIFICATION_MODE_NONE


3
আসুন আশা করি এটি সমর্থন লাইব্রেরিতে ফিরে যায় তবে ও :)
স্টেফান হস্টেইন

2
এখানে লাইব্রেরি যুক্ত করুন!
কুণাল ধরাইয়া

4
এক্সএমএল ব্যবহার করে কীভাবে ন্যায়সঙ্গত?
বিকাশ পরজুলি

14
আপনি অ্যান্ড্রয়েড ব্যবহার করতে পারেন: এক্সটিএমএলে জাস্টিফিকেশনমোড = "ইন্টার_ওয়ার্ড"।
খ্রিস্টান ডি

5
এন্ড্রয়েডের জন্য এপিআই 26 প্রয়োজনীয়: জাস্টিফিকেশনমড।
বিনচ

42

আপনি গিথুবে অ্যান্ড্রয়েড প্রকল্পের জন্য জাস্টিফাইড টেক্সটভিউ ব্যবহার করতে পারেন । এটি একটি কাস্টম ভিউ যা আপনার পক্ষে ন্যায়সঙ্গত পাঠ্য অনুকরণ করে। এটি অ্যান্ড্রয়েড 2.0+ এবং ডান থেকে বাম ভাষাগুলি সমর্থন করে। এখানে চিত্র বর্ণনা লিখুন


এটি স্প্যানিয়েবল স্ট্রিং সমর্থন করে না
এমএসপিহর

কীভাবে আমরা আমাদের নিজস্ব লেখা যুক্ত করতে পারি?
করণ

দয়া করে গিথুবে নমুনা দেখুন।
সাইদ জারিনফাম

হাই সা Saeedদ, আপনার সহায়তার জন্য টিএনএক্স, প্রচলিত পাঠ্যদর্শনগুলি সমর্থন করার কোনও উপায় আছে ?!
হামিদ রেজা

@SaeedZarinfam আমি "Android এর জন্য JustifiedTextView" ব্যবহার করার চেষ্টা করেছিলেন কিন্তু আমি XML ট্যাগ ir.noghteh.JustifiedTextView উপর ত্রুটিটি পেয়েছিলেন would তোমার দর্শন লগ করা Plz আমাকে এই প্রশ্নে সাহায্যের জন্য stackoverflow.com/questions/37911376/...
Jumong

30

আমি এটি করার জন্য নেটিভ টেক্সটভিউতে একটি উইজেট বেস লিখি।

GitHub


আমি এটিকে পুনরায় সংশোধন করব, বেশিরভাগ কারণ এটি অ্যান্ড্রয়েড অফিসার এসডিকে মূল পাঠ্যদর্শনটিতে ভিত্তি করে রয়েছে, যা আমার ব্যক্তিগত মতে এটি ওয়েব ভিউজের কৌশলটির চেয়ে অনেক বেশি হালকা যা এই সাধারণ বিষয় সম্পর্কে পোস্ট করছে। উদাহরণস্বরূপ তালিকার অবজেক্টগুলি ব্যবহার করে আপনি যদি এমন অ্যাপ্লিকেশন তৈরি করেন যা মেমোরি ওয়াইস হওয়া প্রয়োজন, আপনি এই জাতীয় কিছু ব্যবহার বিবেচনা করতে পারেন। Ï সমস্ত প্রস্তুত এটি চেষ্টা করে দেখুন এবং প্রত্যাশার মতো কাজ করে। যদি আপনি লোকেরা আরও 1 জেনার মতো আরও 1 জেনে থাকেন তবে দয়া করে আপনি আমার সাথে অভিজ্ঞতা ভাগ করে নিতে পারেন।
ইউজার

চমৎকার কাজ বিটিডব্লিউ। আমি যা খুঁজছিলাম
ইউজার

5
আরটিএল ভাষা পার্সিয়ানের মতো সমর্থন করে না
গর্তে আগুন

1
@ ফ্র্যাঙ্ক চেং খুব দরকারী লাইব্রেরি। অনুচ্ছেদের শেষে আমি প্রচুর স্থান পেয়েছি। আমি কীভাবে এটি ঠিক করতে পারি?
iSrinivasan27

1
আমার জন্য কাজ করেছে, তবে পাঠ্যদর্শনটির শেষ লাইনটি বন্ধ হয়ে গেছে। পাঠ্যদর্শনটির জন্য আমাকে 5 টি প্যাডিং রাখতে হয়েছিল।
থারকানাर्मানা

23

আমি এই সমস্যা সমাধানের জন্য একটি উপায় খুঁজে পেয়েছি, তবে এটি খুব অনুগ্রহ নাও করতে পারে, তবে প্রভাবটি খারাপ নয়।

এর নীতিটি হ'ল প্রতিটি লাইনের স্পেসগুলি স্থির-প্রস্থ ইমেজস্প্যান (রঙটি স্বচ্ছ) তে প্রতিস্থাপন করা।

public static void justify(final TextView textView) {

    final AtomicBoolean isJustify = new AtomicBoolean(false);

    final String textString = textView.getText().toString();

    final TextPaint textPaint = textView.getPaint();

    final SpannableStringBuilder builder = new SpannableStringBuilder();

    textView.post(new Runnable() {
        @Override
        public void run() {

            if (!isJustify.get()) {

                final int lineCount = textView.getLineCount();
                final int textViewWidth = textView.getWidth();

                for (int i = 0; i < lineCount; i++) {

                    int lineStart = textView.getLayout().getLineStart(i);
                    int lineEnd = textView.getLayout().getLineEnd(i);

                    String lineString = textString.substring(lineStart, lineEnd);

                    if (i == lineCount - 1) {
                        builder.append(new SpannableString(lineString));
                        break;
                    }

                    String trimSpaceText = lineString.trim();
                    String removeSpaceText = lineString.replaceAll(" ", "");

                    float removeSpaceWidth = textPaint.measureText(removeSpaceText);
                    float spaceCount = trimSpaceText.length() - removeSpaceText.length();

                    float eachSpaceWidth = (textViewWidth - removeSpaceWidth) / spaceCount;

                    SpannableString spannableString = new SpannableString(lineString);
                    for (int j = 0; j < trimSpaceText.length(); j++) {
                        char c = trimSpaceText.charAt(j);
                        if (c == ' ') {
                            Drawable drawable = new ColorDrawable(0x00ffffff);
                            drawable.setBounds(0, 0, (int) eachSpaceWidth, 0);
                            ImageSpan span = new ImageSpan(drawable);
                            spannableString.setSpan(span, j, j + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                    }

                    builder.append(spannableString);
                }

                textView.setText(builder);
                isJustify.set(true);
            }
        }
    });
}

আমি কোডটি গিটহাবের উপরে রেখেছি: https://github.com/twiceyuan/TextJusificationsation

সংক্ষিপ্ত বিবরণ:

সংক্ষিপ্ত বিবরণ


1
এক্সএমএল পূর্বরূপে কাজ করছে না তবে একটি বাস্তব ডিভাইস নিয়ে দুর্দান্ত কাজ করছে :)
ppreze

15

এক্সএমএল লেআউট: টেক্সটভিউয়ের পরিবর্তে ওয়েবভিউ ঘোষণা করুন

<WebView
 android:id="@+id/textContent"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content" />

জাভা কোড: ওয়েবভিউতে পাঠ্য ডেটা সেট করুন

WebView view = (WebView) findViewById(R.id.textContent);
String text;
text = "<html><body><p align=\"justify\">";
text+= "This is the text will be justified when displayed!!!";
text+= "</p></body></html>";
view.loadData(text, "text/html", "utf-8");

এটি আপনার সমস্যার সমাধান করতে পারে। এটি পুরোপুরি আমার পক্ষে কাজ করেছে।


9

এখানে আমি এটি কীভাবে করেছি তা আমি মনে করি যে আমি এটি করতে পারি সবচেয়ে মার্জিত উপায়। এই সমাধানের সাহায্যে আপনার বিন্যাসে আপনার কেবলমাত্র কাজগুলি হ'ল:

  • একটি অতিরিক্ত xmlnsঘোষণা যোগ করুন
  • পরিবর্তন করুন আপনার TextView আপনার নতুন নামস্থানে অ্যান্ড্রয়েড এর থেকে উৎস পাঠ্য নামস্থান
  • TextViewসঙ্গে আপনার গুলি প্রতিস্থাপনx.y.z.JustifiedTextView

এখানে কোড। আমার ফোনে পুরোপুরি সূক্ষ্মভাবে কাজ করে (গ্যালাক্সি নেক্সাস অ্যান্ড্রয়েড 4.0.০.২, গ্যালাক্সি টিওস অ্যান্ড্রয়েড ২.১) আপনার প্যাকেজের নামটি আপনার সাথে প্রতিস্থাপন করতে অবশ্যই নিঃসঙ্কোচে।

/ এ্যাসেটস / জাস্টিফাইড_টেক্সটভিউ সিএসএস :

body {
    font-size: 1.0em;
    color: rgb(180,180,180);
    text-align: justify;
}

@media screen and (-webkit-device-pixel-ratio: 1.5) {
    /* CSS for high-density screens */
    body {
        font-size: 1.05em;
    }
}

@media screen and (-webkit-device-pixel-ratio: 2.0) {
    /* CSS for extra high-density screens */
    body {
        font-size: 1.1em;
    }
}

/res/values/attrs.xML :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="JustifiedTextView">
        <attr name="text" format="reference" />
    </declare-styleable>
</resources>

/res/layout/test.xML :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/net.bicou.myapp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <net.bicou.myapp.widget.JustifiedTextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            myapp:text="@string/surv1_1" />

    </LinearLayout>
</ScrollView>

/src/net/bicou/myapp/widget/JustifiedTextView.java :

package net.bicou.myapp.widget;

import net.bicou.myapp.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.webkit.WebView;

public class JustifiedTextView extends WebView {
    public JustifiedTextView(final Context context) {
        this(context, null, 0);
    }

    public JustifiedTextView(final Context context, final AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public JustifiedTextView(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);

        if (attrs != null) {
            final TypedValue tv = new TypedValue();
            final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.JustifiedTextView, defStyle, 0);
            if (ta != null) {
                ta.getValue(R.styleable.JustifiedTextView_text, tv);

                if (tv.resourceId > 0) {
                    final String text = context.getString(tv.resourceId).replace("\n", "<br />");
                    loadDataWithBaseURL("file:///android_asset/",
                            "<html><head>" +
                                    "<link rel=\"stylesheet\" type=\"text/css\" href=\"justified_textview.css\" />" +
                                    "</head><body>" + text + "</body></html>",

                                    "text/html", "UTF8", null);
                    setTransparentBackground();
                }
            }
        }
    }

    public void setTransparentBackground() {
        try {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        } catch (final NoSuchMethodError e) {
        }

        setBackgroundColor(Color.TRANSPARENT);
        setBackgroundDrawable(null);
        setBackgroundResource(0);
    }
}

Android 3+ এ স্বচ্ছ পটভূমি পেতে আমাদের সফ্টওয়্যারটিতে রেন্ডারিং সেট করতে হবে। অতএব Android এর পুরানো সংস্করণগুলির জন্য চেষ্টা করুন।

আশাকরি এটা সাহায্য করবে!

PS: দয়া করে এমনটি করবেন না যে এটি প্রত্যাশিত আচরণ পেতে আপনার অ্যান্ড্রয়েড 3+ এ আপনার সম্পূর্ণ ক্রিয়াকলাপে যুক্ত করা কার্যকর হতে পারে:
android:hardwareAccelerated="false"


এটি ওয়েবভিউ ভিত্তিক সমাধান। পাঠ্যদর্শনটি ওয়েবভিউ এবং স্ক্রোলভিউয়ের চেয়ে হালকা বিবেচনা করে এখনও যে কেউ টেক্সটভিউ ভিত্তিক খুঁজে পেয়েছে।
ইউজার



6

এই সমস্যাটি সমাধান করার জন্য আমি আমার নিজের ক্লাসটি লিখছি, এখানেই আপনাকে স্থির ন্যায্য ফাংশনটি বলতে হবে যা দুটি যুক্তি গ্রহণ করে

  1. পাঠ্য ভিউ অবজেক্ট
  2. সামগ্রীর প্রস্থ (আপনার পাঠ্য দর্শনটির মোট প্রস্থ)

//প্রধান কাজ

package com.fawad.textjustification;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Gravity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
    static Point size;
    static float density;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Display display = getWindowManager().getDefaultDisplay();
        size=new Point();
        DisplayMetrics dm=new DisplayMetrics();
        display.getMetrics(dm);
        density=dm.density;
        display.getSize(size);


        TextView tv=(TextView)findViewById(R.id.textView1);
        Typeface typeface=Typeface.createFromAsset(this.getAssets(), "Roboto-Medium.ttf");
        tv.setTypeface(typeface);
        tv.setLineSpacing(0f, 1.2f);
        tv.setTextSize(10*MainActivity.density);

        //some random long text
         String myText=getResources().getString(R.string.my_text);

         tv.setText(myText);
        TextJustification.justify(tv,size.x);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

// TextJustificationClass

package com.fawad.textjustification;

import java.util.ArrayList;

import android.graphics.Paint;
import android.text.TextUtils;
import android.widget.TextView;

public class TextJustification {

    public static void justify(TextView textView,float contentWidth) {
        String text=textView.getText().toString();
        Paint paint=textView.getPaint();

        ArrayList<String> lineList=lineBreak(text,paint,contentWidth);

        textView.setText(TextUtils.join(" ", lineList).replaceFirst("\\s", ""));
    }


    private static ArrayList<String> lineBreak(String text,Paint paint,float contentWidth){
        String [] wordArray=text.split("\\s"); 
        ArrayList<String> lineList = new ArrayList<String>();
        String myText="";

        for(String word:wordArray){
            if(paint.measureText(myText+" "+word)<=contentWidth)
                myText=myText+" "+word;
            else{
                int totalSpacesToInsert=(int)((contentWidth-paint.measureText(myText))/paint.measureText(" "));
                lineList.add(justifyLine(myText,totalSpacesToInsert));
                myText=word;
            }
        }
        lineList.add(myText);
        return lineList;
    }

    private static String justifyLine(String text,int totalSpacesToInsert){
        String[] wordArray=text.split("\\s");
        String toAppend=" ";

        while((totalSpacesToInsert)>=(wordArray.length-1)){
            toAppend=toAppend+" ";
            totalSpacesToInsert=totalSpacesToInsert-(wordArray.length-1);
        }
        int i=0;
        String justifiedText="";
        for(String word:wordArray){
            if(i<totalSpacesToInsert)
                justifiedText=justifiedText+word+" "+toAppend;

            else                
                justifiedText=justifiedText+word+toAppend;

            i++;
        }

        return justifiedText;
    }

}

// এক্সএমএল

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".MainActivity" 
    >



    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"

             >
            <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

কমপক্ষে "\ n" বা System.getProperty ("line.separator") শ্রদ্ধার জন্য দয়া করে এই উদাহরণটি সম্পূর্ণ করুন :)
ceph3us

5

FILL_HORIZONTALসমতূল্য CENTER_HORIZONTAL। আপনি এই কোড স্নিপেটটি টেক্সটভিউয়ের উত্স কোডটিতে দেখতে পারেন:

case Gravity.CENTER_HORIZONTAL:
case Gravity.FILL_HORIZONTAL:
    return (mLayout.getLineWidth(0) - ((mRight - mLeft) -
            getCompoundPaddingLeft() - getCompoundPaddingRight())) /
            getHorizontalFadingEdgeLength();

4

এই সমস্যার জন্য একটি কাস্টমভিউ রয়েছে, এই কাস্টম পাঠ্য দর্শনটি সমর্থনযোগ্য পাঠ্য দর্শনটিকে সমর্থন করে।

এটি লুট করুন: জাস্টিফাইড টেক্সটভিউ

import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.view.View;

public class JustifiedTextView extends View {
        String text;
        ArrayList<Line> linesCollection = new ArrayList<Line>();
        TextPaint textPaint;
        Typeface font;
        int textColor;
        float textSize = 42f, lineHeight = 57f, wordSpacing = 15f, lineSpacing = 15f;
        float onBirim, w, h;
        float leftPadding, rightPadding;

        public JustifiedTextView(Context context, String text) {
                super(context);
                this.text = text;
                init();
        }

        private void init() {
                textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
                textColor = Color.BLACK;
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);

                if (font != null) {
                        font = Typeface.createFromAsset(getContext().getAssets(), "font/Trykker-Regular.ttf");
                        textPaint.setTypeface(font);
                }
                textPaint.setColor(textColor);

                int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();
                w = resolveSizeAndState(minw, widthMeasureSpec, 1);
                h = MeasureSpec.getSize(widthMeasureSpec);

                onBirim = 0.009259259f * w;
                lineHeight = textSize + lineSpacing;
                leftPadding = 3 * onBirim + getPaddingLeft();
                rightPadding = 3 * onBirim + getPaddingRight();

                textPaint.setTextSize(textSize);

                wordSpacing = 15f;
                Line lineBuffer = new Line();
                this.linesCollection.clear();
                String[] lines = text.split("\n");
                for (String line : lines) {
                        String[] words = line.split(" ");
                        lineBuffer = new Line();
                        float lineWidth = leftPadding + rightPadding;
                        float totalWordWidth = 0;
                        for (String word : words) {
                                float ww = textPaint.measureText(word) + wordSpacing;
                                if (lineWidth + ww + (lineBuffer.getWords().size() * wordSpacing) > w) {// is
                                        lineBuffer.addWord(word);
                                        totalWordWidth += textPaint.measureText(word);
                                        lineBuffer.setSpacing((w - totalWordWidth - leftPadding - rightPadding) / (lineBuffer.getWords().size() - 1));
                                        this.linesCollection.add(lineBuffer);
                                        lineBuffer = new Line();
                                        totalWordWidth = 0;
                                        lineWidth = leftPadding + rightPadding;
                                } else {
                                        lineBuffer.setSpacing(wordSpacing);
                                        lineBuffer.addWord(word);
                                        totalWordWidth += textPaint.measureText(word);
                                        lineWidth += ww;
                                }
                        }
                        this.linesCollection.add(lineBuffer);
                }
                setMeasuredDimension((int) w, (int) ((this.linesCollection.size() + 1) * lineHeight + (10 * onBirim)));
        }

        @Override
        protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                canvas.drawLine(0f, 10f, getMeasuredWidth(), 10f, textPaint);
                float x, y = lineHeight + onBirim;
                for (Line line : linesCollection) {
                        x = leftPadding;
                        for (String s : line.getWords()) {
                                canvas.drawText(s, x, y, textPaint);
                                x += textPaint.measureText(s) + line.spacing;
                        }
                        y += lineHeight;
                }
        }

        public String getText() {
                return text;
        }

        public void setText(String text) {
                this.text = text;
        }

        public Typeface getFont() {
                return font;
        }

        public void setFont(Typeface font) {
                this.font = font;
        }

        public float getLineHeight() {
                return lineHeight;
        }

        public void setLineHeight(float lineHeight) {
                this.lineHeight = lineHeight;
        }

        public float getLeftPadding() {
                return leftPadding;
        }

        public void setLeftPadding(float leftPadding) {
                this.leftPadding = leftPadding;
        }

        public float getRightPadding() {
                return rightPadding;
        }

        public void setRightPadding(float rightPadding) {
                this.rightPadding = rightPadding;
        }

        public void setWordSpacing(float wordSpacing) {
                this.wordSpacing = wordSpacing;
        }

        public float getWordSpacing() {
                return wordSpacing;
        }

        public float getLineSpacing() {
                return lineSpacing;
        }

        public void setLineSpacing(float lineSpacing) {
                this.lineSpacing = lineSpacing;
        }

        class Line {
                ArrayList<String> words = new ArrayList<String>();
                float spacing = 15f;

                public Line() {
                }

                public Line(ArrayList<String> words, float spacing) {
                        this.words = words;
                        this.spacing = spacing;
                }

                public void setSpacing(float spacing) {
                        this.spacing = spacing;
                }

                public float getSpacing() {
                        return spacing;
                }

                public void addWord(String s) {
                        words.add(s);
                }

                public ArrayList<String> getWords() {
                        return words;
                }
        }
}

আপনার এসআরসি ফোল্ডারে উপরের ক্লাসটি যুক্ত করুন এবং আপনার বিন্যাসে যুক্ত করতে এই নমুনা কোডটি ব্যবহার করুন:

JustifiedTextView jtv= new JustifiedTextView(getApplicationContext(), "Lorem ipsum dolor sit amet... ");
LinearLayout place = (LinearLayout) findViewById(R.id.book_profile_content);
place.addView(jtv);

4

গিথুব এখানে দেখুন

আপনার প্রকল্পে কেবলমাত্র "TextJustifyUtils.java" এবং "TextViewEx.java" দুটি ফাইল আমদানি করুন।

public class TextJustifyUtils {
    // Please use run(...) instead
    public static void justify(TextView textView) {
        Paint paint = new Paint();

        String[] blocks;
        float spaceOffset = 0;
        float textWrapWidth = 0;

        int spacesToSpread;
        float wrappedEdgeSpace;
        String block;
        String[] lineAsWords;
        String wrappedLine;
        String smb = "";
        Object[] wrappedObj;

        // Pull widget properties
        paint.setColor(textView.getCurrentTextColor());
        paint.setTypeface(textView.getTypeface());
        paint.setTextSize(textView.getTextSize());

        textWrapWidth = textView.getWidth();
        spaceOffset = paint.measureText(" ");
        blocks = textView.getText().toString().split("((?<=\n)|(?=\n))");

        if (textWrapWidth < 20) {
            return;
        }

        for (int i = 0; i < blocks.length; i++) {
            block = blocks[i];

            if (block.length() == 0) {
                continue;
            } else if (block.equals("\n")) {
                smb += block;
                continue;
            }

            block = block.trim();

            if (block.length() == 0)
                continue;

            wrappedObj = TextJustifyUtils.createWrappedLine(block, paint,
                    spaceOffset, textWrapWidth);
            wrappedLine = ((String) wrappedObj[0]);
            wrappedEdgeSpace = (Float) wrappedObj[1];
            lineAsWords = wrappedLine.split(" ");
            spacesToSpread = (int) (wrappedEdgeSpace != Float.MIN_VALUE ? wrappedEdgeSpace
                    / spaceOffset
                    : 0);

            for (String word : lineAsWords) {
                smb += word + " ";

                if (--spacesToSpread > 0) {
                    smb += " ";
                }
            }

            smb = smb.trim();

            if (blocks[i].length() > 0) {
                blocks[i] = blocks[i].substring(wrappedLine.length());

                if (blocks[i].length() > 0) {
                    smb += "\n";
                }

                i--;
            }
        }

        textView.setGravity(Gravity.LEFT);
        textView.setText(smb);
    }

    protected static Object[] createWrappedLine(String block, Paint paint,
            float spaceOffset, float maxWidth) {
        float cacheWidth = maxWidth;
        float origMaxWidth = maxWidth;

        String line = "";

        for (String word : block.split("\\s")) {
            cacheWidth = paint.measureText(word);
            maxWidth -= cacheWidth;

            if (maxWidth <= 0) {
                return new Object[] { line, maxWidth + cacheWidth + spaceOffset };
            }

            line += word + " ";
            maxWidth -= spaceOffset;

        }

        if (paint.measureText(block) <= origMaxWidth) {
            return new Object[] { block, Float.MIN_VALUE };
        }

        return new Object[] { line, maxWidth };
    }

    final static String SYSTEM_NEWLINE = "\n";
    final static float COMPLEXITY = 5.12f; // Reducing this will increase
                                            // efficiency but will decrease
                                            // effectiveness
    final static Paint p = new Paint();

    public static void run(final TextView tv, float origWidth) {
        String s = tv.getText().toString();
        p.setTypeface(tv.getTypeface());
        String[] splits = s.split(SYSTEM_NEWLINE);
        float width = origWidth - 5;
        for (int x = 0; x < splits.length; x++)
            if (p.measureText(splits[x]) > width) {
                splits[x] = wrap(splits[x], width, p);
                String[] microSplits = splits[x].split(SYSTEM_NEWLINE);
                for (int y = 0; y < microSplits.length - 1; y++)
                    microSplits[y] = justify(removeLast(microSplits[y], " "),
                            width, p);
                StringBuilder smb_internal = new StringBuilder();
                for (int z = 0; z < microSplits.length; z++)
                    smb_internal.append(microSplits[z]
                            + ((z + 1 < microSplits.length) ? SYSTEM_NEWLINE
                                    : ""));
                splits[x] = smb_internal.toString();
            }
        final StringBuilder smb = new StringBuilder();
        for (String cleaned : splits)
            smb.append(cleaned + SYSTEM_NEWLINE);
        tv.setGravity(Gravity.LEFT);
        tv.setText(smb);
    }

    private static String wrap(String s, float width, Paint p) {
        String[] str = s.split("\\s"); // regex
        StringBuilder smb = new StringBuilder(); // save memory
        smb.append(SYSTEM_NEWLINE);
        for (int x = 0; x < str.length; x++) {
            float length = p.measureText(str[x]);
            String[] pieces = smb.toString().split(SYSTEM_NEWLINE);
            try {
                if (p.measureText(pieces[pieces.length - 1]) + length > width)
                    smb.append(SYSTEM_NEWLINE);
            } catch (Exception e) {
            }
            smb.append(str[x] + " ");
        }
        return smb.toString().replaceFirst(SYSTEM_NEWLINE, "");
    }

    private static String removeLast(String s, String g) {
        if (s.contains(g)) {
            int index = s.lastIndexOf(g);
            int indexEnd = index + g.length();
            if (index == 0)
                return s.substring(1);
            else if (index == s.length() - 1)
                return s.substring(0, index);
            else
                return s.substring(0, index) + s.substring(indexEnd);
        }
        return s;
    }

    private static String justifyOperation(String s, float width, Paint p) {
        float holder = (float) (COMPLEXITY * Math.random());
        while (s.contains(Float.toString(holder)))
            holder = (float) (COMPLEXITY * Math.random());
        String holder_string = Float.toString(holder);
        float lessThan = width;
        int timeOut = 100;
        int current = 0;
        while (p.measureText(s) < lessThan && current < timeOut) {
            s = s.replaceFirst(" ([^" + holder_string + "])", " "
                    + holder_string + "$1");
            lessThan = p.measureText(holder_string) + lessThan
                    - p.measureText(" ");
            current++;
        }
        String cleaned = s.replaceAll(holder_string, " ");
        return cleaned;
    }

    private static String justify(String s, float width, Paint p) {
        while (p.measureText(s) < width) {
            s = justifyOperation(s, width, p);
        }
        return s;
    }
}

এবং

public class TextViewEx extends TextView {
    private Paint paint = new Paint();

    private String[] blocks;
    private float spaceOffset = 0;
    private float horizontalOffset = 0;
    private float verticalOffset = 0;
    private float horizontalFontOffset = 0;
    private float dirtyRegionWidth = 0;
    private boolean wrapEnabled = false;
    int left, top, right, bottom = 0;
    private Align _align = Align.LEFT;
    private float strecthOffset;
    private float wrappedEdgeSpace;
    private String block;
    private String wrappedLine;
    private String[] lineAsWords;
    private Object[] wrappedObj;

    private Bitmap cache = null;
    private boolean cacheEnabled = false;

    public TextViewEx(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // set a minimum of left and right padding so that the texts are not too
        // close to the side screen
        // this.setPadding(10, 0, 10, 0);
    }

    public TextViewEx(Context context, AttributeSet attrs) {
        super(context, attrs);
        // this.setPadding(10, 0, 10, 0);
    }

    public TextViewEx(Context context) {
        super(context);
        // this.setPadding(10, 0, 10, 0);
    }

    @Override
    public void setPadding(int left, int top, int right, int bottom) {
        // TODO Auto-generated method stub
        super.setPadding(left + 10, top, right + 10, bottom);
    }

    @Override
    public void setDrawingCacheEnabled(boolean cacheEnabled) {
        this.cacheEnabled = cacheEnabled;
    }

    public void setText(String st, boolean wrap) {
        wrapEnabled = wrap;
        super.setText(st);
    }

    public void setTextAlign(Align align) {
        _align = align;
    }

    @SuppressLint("NewApi")
    @Override
    protected void onDraw(Canvas canvas) {
        // If wrap is disabled then,
        // request original onDraw
        if (!wrapEnabled) {
            super.onDraw(canvas);
            return;
        }

        // Active canas needs to be set
        // based on cacheEnabled
        Canvas activeCanvas = null;

        // Set the active canvas based on
        // whether cache is enabled
        if (cacheEnabled) {

            if (cache != null) {
                // Draw to the OS provided canvas
                // if the cache is not empty
                canvas.drawBitmap(cache, 0, 0, paint);
                return;
            } else {
                // Create a bitmap and set the activeCanvas
                // to the one derived from the bitmap
                cache = Bitmap.createBitmap(getWidth(), getHeight(),
                        Config.ARGB_4444);
                activeCanvas = new Canvas(cache);
            }
        } else {
            // Active canvas is the OS
            // provided canvas
            activeCanvas = canvas;
        }

        // Pull widget properties
        paint.setColor(getCurrentTextColor());
        paint.setTypeface(getTypeface());
        paint.setTextSize(getTextSize());
        paint.setTextAlign(_align);
        paint.setFlags(Paint.ANTI_ALIAS_FLAG);

        // minus out the paddings pixel
        dirtyRegionWidth = getWidth() - getPaddingLeft() - getPaddingRight();
        int maxLines = Integer.MAX_VALUE;
        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
        if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            maxLines = getMaxLines();
        }
        int lines = 1;
        blocks = getText().toString().split("((?<=\n)|(?=\n))");
        verticalOffset = horizontalFontOffset = getLineHeight() - 0.5f; // Temp
                                                                        // fix
        spaceOffset = paint.measureText(" ");

        for (int i = 0; i < blocks.length && lines <= maxLines; i++) {
            block = blocks[i];
            horizontalOffset = 0;

            if (block.length() == 0) {
                continue;
            } else if (block.equals("\n")) {
                verticalOffset += horizontalFontOffset;
                continue;
            }

            block = block.trim();

            if (block.length() == 0) {
                continue;
            }

            wrappedObj = TextJustifyUtils.createWrappedLine(block, paint,
                    spaceOffset, dirtyRegionWidth);

            wrappedLine = ((String) wrappedObj[0]);
            wrappedEdgeSpace = (Float) wrappedObj[1];
            lineAsWords = wrappedLine.split(" ");
            strecthOffset = wrappedEdgeSpace != Float.MIN_VALUE ? wrappedEdgeSpace
                    / (lineAsWords.length - 1)
                    : 0;

            for (int j = 0; j < lineAsWords.length; j++) {
                String word = lineAsWords[j];
                if (lines == maxLines && j == lineAsWords.length - 1) {
                    activeCanvas.drawText("...", horizontalOffset,
                            verticalOffset, paint);

                } else if (j == 0) {
                    // if it is the first word of the line, text will be drawn
                    // starting from right edge of textview
                    if (_align == Align.RIGHT) {
                        activeCanvas.drawText(word, getWidth()
                                - (getPaddingRight()), verticalOffset, paint);
                        // add in the paddings to the horizontalOffset
                        horizontalOffset += getWidth() - (getPaddingRight());
                    } else {
                        activeCanvas.drawText(word, getPaddingLeft(),
                                verticalOffset, paint);
                        horizontalOffset += getPaddingLeft();
                    }

                } else {
                    activeCanvas.drawText(word, horizontalOffset,
                            verticalOffset, paint);
                }
                if (_align == Align.RIGHT)
                    horizontalOffset -= paint.measureText(word) + spaceOffset
                            + strecthOffset;
                else
                    horizontalOffset += paint.measureText(word) + spaceOffset
                            + strecthOffset;
            }

            lines++;

            if (blocks[i].length() > 0) {
                blocks[i] = blocks[i].substring(wrappedLine.length());
                verticalOffset += blocks[i].length() > 0 ? horizontalFontOffset
                        : 0;
                i--;
            }
        }

        if (cacheEnabled) {
            // Draw the cache onto the OS provided
            // canvas.
            canvas.drawBitmap(cache, 0, 0, paint);
        }
    }
}

এখন, আপনি যদি সাধারণ পাঠ্য ভিউ ব্যবহার করেন তবে:

<TextView
                android:id="@+id/original"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/lorum_ipsum" />

সহজভাবে ব্যবহার

<yourpackagename.TextViewEx
                android:id="@+id/changed"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/lorum_ipsum" />

একটি ভেরিয়েবল সংজ্ঞায়িত করুন এবং সত্য হতে ন্যায়সঙ্গত সেট করুন,

TextViewEx changed = (TextViewEx) findViewById(R.id.changed);
changed.setText(getResources().getString(R.string.lorum_ipsum),true);

সাহসী পাঠ্যটি কাজ করছে না, দয়া করে যদি আপনার এটির জন্য কোনও সমাধান থাকে?
প্রভেণব

4

টেক্সটভিউ এক্সএমএল এর জন্য অ্যান্ড্রয়েড পাঠ্য সমর্থনযোগ্য

এক্সএমএল ব্যবহার করে কেবল অ্যান্ড্রয়েড পাঠ্যকে ন্যায়সঙ্গত করুন। আপনি কেবল টেক্সটভিউ উইজেটে বাস্তবায়ন করতে পারেন।

 <TextView
    android:justificationMode="inter_word"
/>

ডিফল্ট হয় android:justificationMode="none"


2

আমি মনে করি দুটি বিকল্প আছে:

  • প্যাঙ্গোর মতো কিছু ব্যবহার করুন যা এনডিকে এর মাধ্যমে বিশেষায়িত হয় এবং একটি ওপেনজিএল বা অন্য পৃষ্ঠায় পাঠ্য সরবরাহ করে।

  • দৈর্ঘ্যের শব্দের পেতে পেইন্ট.মিজারটেক্সট () এবং বন্ধুদের ব্যবহার করুন এবং কাস্টম ভিউতে ম্যানুয়ালি এগুলি ক্যানভাসে রেখে দিন।


2

অ্যান্ড্রয়েডে, পাঠ্যের ন্যায্যতা বজায় রাখতে এবং পটভূমির রঙের ছাঁটাই না করার জন্য, এটি চেষ্টা করুন, এটি আমার জন্য কাজ করেছে, অ্যান্ড্রয়েড, এফএফ, অর্থাত & ক্রোমের উপর ধারাবাহিক ফলাফল তৈরি করেছে তবে আপনাকে পাঠ্যের জন্য যে স্থান রেখে গেছে তা নির্ধারণ করতে হবে প্যাডিং গণনা করার সময়।

<td style="font-family:Calibri,Arial;
    font-size:15px;
    font-weight:800;
    background-color:#f5d5fd;
    color:black;
    border-style:solid;
    border-width:1px;
    border-color:#bd07eb;
    padding-left:10px;
    padding-right:1000px;
    padding-top:3px;
    padding-bottom:3px;
>

হ্যাকটি হ'ল padding-right:1000px;টেক্সটটি চরম বাম দিকে ঠেলে দেয়।

বাম বা সিএসএস বা এইচটিএমএল কোডের ন্যায্যতা প্রমাণের যে কোনও প্রয়াস কেবলমাত্র অর্ধ প্রস্থের পটভূমিতে ফলাফল দেয়।



1

অ্যান্ড্রয়েড এখনও সম্পূর্ণ ন্যায়সঙ্গত সমর্থন করে না। আমরা টেক্সটভিউ ব্যবহারের পরিবর্তে ওয়েবভিউ ব্যবহার করতে এবং এইচটিএমএলকে ন্যায়সঙ্গত করতে পারি। এটি খুব সূক্ষ্ম কাজ করে। যদি আপনি ছেলেরা পরিষ্কার না হন তবে নির্দ্বিধায় আমাকে জিজ্ঞাসা করুন :)


এটা করা যেতে পারে। তবে আমরা কি এর পটভূমি সেট করতে পারি WebView transparent। আমার একটি পটভূমি চিত্র আছে।
মিঃ ইন্ডিয়া

আমি মনে করি না এটি স্মৃতি বুদ্ধিমান হতে পারে।
ইউজার

1

নীচের লিঙ্কে এই সমাধানটি চেষ্টা করে দেখুন কেবলমাত্র প্রকল্প ফোল্ডারে সেই শ্রেণি তৈরি করুন এবং এটি ব্যবহার করুন। এটি আমার জন্য দারুণ কাজ করছে :)

একটি ওয়েবভিউ ব্যবহার করে তবে একটি টেক্সটভিউয়ের মতো ইন্টারফেস উপস্থাপন করে কোনও অ্যান্ড্রয়েড অ্যাপে পাঠ্যকে ন্যায়সঙ্গত করুন?


দয়া করে কিছু বিশদ দিন।
সৈয়দা জুনাইরা

1

টেক্সটভিউ সামগ্রীর ন্যায্যতা: এর সহজ ছেলেরা কেবল অ্যান্ড্রয়েড ব্যবহার করে: ন্যায্যতা মোড = "আন্তঃব্যবহার" আপনার পাঠ্য ভিউ ট্যাগের মধ্যে _

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="92dp"
    android:text="@string/contents"
    android:layout_margin="20dp"
    android:justificationMode="inter_word"
     />

-4

< RelativeLayout >(পূরণ_পিতা নিশ্চিত করা) ব্যবহার করে দেখুন , তারপরে কেবল যুক্ত করুন android:layout_alignParentLeft="true"এবং and

android:layout_alignParentRight="true" বাহ্যিক বাম এবং ডানদিকে আপনি যে উপাদানগুলি পছন্দ করতে চান

বলামা, ন্যায্য!


এখানে বড় উদাহরণ: stackoverflow.com/questions/2099249/...
esharp

3
এখনও তিনি যা খুঁজছেন তা নয়। উইকিপিডিয়া: এন.ইউইকিপিডিয়া.org
কেভিন কপক

এটি যৌক্তিকতা নয়
আরশ হাতামি

-5

আপনি সেট করতে হবে

android:layout_height="wrap_content"

এবং

android:layout_centerInParent="true"

11
এটি সম্পূর্ণ পাঠ্য নয় এমন পাঠ্যটিকে কেন্দ্র করে
জানুস

-12

এটি আপনার পাঠ্যের সত্যতা প্রমাণ করে না তবে

android:gravity="center_horizontal"

আপনার কাছে সেরা পছন্দ।


9
না, এটি পাঠ্যটিকে কেন্দ্র করে। এটি ন্যায়সঙ্গত হয় না। বরাত দিয়ে উইকিপিডিয়া : "সমর্থনযোগ্য লেখা, শব্দের মধ্যে স্পেস, এবং, একটি ক্ষুদ্রতর ব্যাপ্তি, গ্লিফ বা বর্ণ (কার্নিং) মধ্যে, প্রসারিত হয় অথবা কখনো কখনো অর্ডার উভয় বাম এবং ডান মার্জিন পাঠ্য সারিবদ্ধ করার জন্য সংকুচিত।"
কমন্সওয়্যার

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