উত্তর:
আপনি একটি ব্যবহার করছেন এটা অর্জন করা সম্ভব স্ট্রিং উৎসের XML ফাইল, যা সমর্থন এইচটিএমএল ট্যাগ মত <b></b>
, <i></i>
এবং <u></u>
।
<resources>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
আপনি যদি কোড ব্যবহার থেকে কিছু আন্ডারলাইন করতে চান:
TextView textView = (TextView) view.findViewById(R.id.textview);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textView.setText(content);
<u>
ট্যাগগুলির মধ্যে অন্তর্নিহিত কাজ না করে এমন কেসগুলি দেখতে পেয়েছি , উদাহরণস্বরূপ কখনও কখনও যদি আপনি কোনও কাস্টম ফন্ট ব্যবহার করছেন। তবে, অন্তর্নিহিত প্রোগ্রামমেটিক্যালি UnderlineSpan
এখনও আমার কাছে ব্যর্থ হয়নি, তাই আমি এটি সবচেয়ে নির্ভরযোগ্য সমাধান হিসাবে সুপারিশ করব।
আপনি চেষ্টা করতে পারেন
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
| Paint.ANTI_ALIAS_FLAG
পাশাপাশি প্রয়োজন হতে পারে বা আপনার পাঠ্যটি খুব তীক্ষ্ণ দেখাবে। এটি নীচের APIগুলিতে প্রায়শই প্রদর্শিত হয়।
textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
উপরের "গৃহীত" উত্তরটি কার্যকর হয় না (যখন আপনি স্ট্রিংটি পছন্দ করার চেষ্টা করেন) textView.setText(Html.fromHtml(String.format(getString(...), ...)))
।
ডকুমেন্টেশনে যেমন বলা হয়েছে আপনাকে অবশ্যই অভ্যন্তর ট্যাগগুলির খোলার বন্ধনীটি (এইচটিএমএল সত্তা এনকোডড) দিয়ে পালাতে হবে <
, উদাহরণস্বরূপ ফলাফলটি দেখতে পাওয়া উচিত:
<resource>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
তারপরে আপনার কোডটিতে আপনি এইটির সাথে পাঠ্যটি সেট করতে পারেন:
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
স্ট্রিংস.এক্সএমএল ফাইল সামগ্রী:
<resource>
<string name="my_text">This is an <u>underline</u>.</string>
</resources>
লেআউট এক্সএমএল ফাইলের উপরের স্ট্রিং রিসোর্সটি নীচে দেখানো মত টেক্সটভিউয়ের নীচের বৈশিষ্ট্য সহ ব্যবহার করুন:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/my_text"
android:selectAllOnFocus="false"
android:linksClickable="false"
android:autoLink="all"
/>
বাটন এবং টেক্সটভিউয়ের জন্য এটি সহজতম উপায়:
বোতাম:
Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Textview:
TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
আন্ডারকর্ডড ক্লিকযোগ্য বাটন স্টাইলটি দেখুন:
<TextView
android:id="@+id/btn_some_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_add_contact"
android:textAllCaps="false"
android:textColor="#57a0d4"
style="@style/Widget.AppCompat.Button.Borderless.Colored" />
strings.xml:
<string name="btn_add_contact"><u>Add new contact</u></string>
ফলাফল:
আন্ডারলাইন করা পাঠ্য অঙ্কনের সর্বাধিক সাম্প্রতিক পদ্ধতির বিষয়টি গিটহাবের উপলভ্য সোর্স কোড সহ মিডিয়ায় রোমেন গাই দ্বারা বর্ণনা করা হয়েছে । এই নমুনা অ্যাপ্লিকেশন দুটি সম্ভাব্য বাস্তবায়ন প্রকাশ করে:
আমি জানি এটি একটি দেরী উত্তর, তবে আমি এমন একটি সমাধান নিয়ে এসেছি যা বেশ ভালভাবে কাজ করে ... আমি কোডটিতে পাঠ্যরেখাটি আন্ডারলাইন করার জন্য অ্যান্টনি ফোরলোনির কাছ থেকে উত্তর নিয়েছি এবং পাঠ্যদর্শনটির একটি সাবক্লাস তৈরি করেছি যা আপনার পক্ষে পরিচালনা করে। তারপরে আপনি যখনই কোনও আন্ডারলাইন করা টেক্সটভিউ পেতে চান আপনি কেবল এক্সএমএলে সাবক্লাসটি ব্যবহার করতে পারেন।
আমি তৈরি ক্লাসটি এখানে:
import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* Created with IntelliJ IDEA.
* User: Justin
* Date: 9/11/13
* Time: 1:10 AM
*/
public class UnderlineTextView extends TextView
{
private boolean m_modifyingText = false;
public UnderlineTextView(Context context)
{
super(context);
init();
}
public UnderlineTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
public UnderlineTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
init();
}
private void init()
{
addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
//Do nothing here... we don't care
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
//Do nothing here... we don't care
}
@Override
public void afterTextChanged(Editable s)
{
if (m_modifyingText)
return;
underlineText();
}
});
underlineText();
}
private void underlineText()
{
if (m_modifyingText)
return;
m_modifyingText = true;
SpannableString content = new SpannableString(getText());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
setText(content);
m_modifyingText = false;
}
}
এখন ... আপনি যখনই এক্সএমএলে একটি আন্ডারলাইন করা পাঠ্যদর্শনটি তৈরি করতে চান, আপনি কেবল নিম্নলিখিতটি করুন:
<com.your.package.name.UnderlineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="This text is underlined"
android:textColor="@color/blue_light"
android:textSize="12sp"
android:textStyle="italic"/>
আমি এই এক্সএমএল স্নিপেটে অতিরিক্ত বিকল্পগুলি যুক্ত করেছি তা দেখানোর জন্য যে আমার উদাহরণটি পাঠ্যের রঙ, আকার এবং স্টাইল পরিবর্তন করে ...
আশাকরি এটা সাহায্য করবে!
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
পদ্ধতির পরিবর্তে একটি ক্লিনার উপায় ব্যবহার করা
textView.getPaint().setUnderlineText(true);
এবং যদি আপনাকে পরে সেই দৃশ্যের জন্য আন্ডারলাইনিং বন্ধ করতে হয়, যেমন একটি রিসাইক্লার ভিউতে পুনঃব্যবহৃত দৃশ্যে, textView.getPaint().setUnderlineText(false);
আমি এই এক্সএমএল অঙ্কনযোগ্যটিকে নীচের সীমানা তৈরি করতে ব্যবহার করেছি এবং আমার পাঠ্যদর্শনটিতে ব্যাকগ্রাউন্ড হিসাবে অঙ্কনযোগ্য প্রয়োগ করেছি
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" >
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:top="-5dp" android:right="-5dp" android:left="-5dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1.5dp"
android:color="@color/pure_white" />
</shape>
</item>
</layer-list>
এক্সএমএলে একটি সহজ এবং নমনীয় সমাধান:
<View
android:layout_width="match_parent"
android:layout_height="3sp"
android:layout_alignLeft="@+id/your_text_view_need_underline"
android:layout_alignRight="@+id/your_text_view_need_underline"
android:layout_below="@+id/your_text_view_need_underline"
android:background="@color/your_color" />
অন্য সমাধানটি হ'ল একটি কাস্টম ভিউ তৈরি করা যা নীচের মত দেখানো হয়েছে টেক্সটভিউ প্রসারিত
public class UnderLineTextView extends TextView {
public UnderLineTextView(Context context) {
super(context);
this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
}
public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
}
}
এবং কেবল নীচে প্রদর্শিত হিসাবে এক্সএমএল যুক্ত করুন
<yourpackage.UnderLineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="underline text"
/>
আমি শমূলের উত্তরটি সরল করে তুলেছি :
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--https://stackoverflow.com/a/40706098/4726718-->
<item
android:left="-5dp"
android:right="-5dp"
android:top="-5dp">
<shape>
<stroke
android:width="1.5dp"
android:color="@color/colorAccent" />
</shape>
</item>
</layer-list>
TextView tv = findViewById(R.id.tv);
tv.setText("some text");
পুরো টেক্সটভিউকে আন্ডারলাইন করুন
setUnderLineText(tv, tv.getText().toString());
টেক্সটভিউয়ের কিছু অংশ আন্ডারলাইন করুন
setUnderLineText(tv, "some");
এডিটেক্সট, বোতাম, চেকবাক্সের মতো পাঠ্যদর্শন শিশুদের সমর্থন করুন
public void setUnderLineText(TextView tv, String textToUnderLine) {
String tvt = tv.getText().toString();
int ofe = tvt.indexOf(textToUnderLine, 0);
UnderlineSpan underlineSpan = new UnderlineSpan();
SpannableString wordToSpan = new SpannableString(tv.getText());
for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
ofe = tvt.indexOf(textToUnderLine, ofs);
if (ofe == -1)
break;
else {
wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
}
}
}
sampleTextView.setText(R.string.sample_string);
তদতিরিক্ত, নিম্নলিখিত কোডটি আন্ডারলাইনটি মুদ্রণ করবে না:
String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);
পরিবর্তে, সমৃদ্ধ পাঠ্য বিন্যাসটি ধরে রাখতে নিম্নলিখিত কোডটি ব্যবহার করুন:
CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);
"আপনি স্ট্রিংটি পুনরুদ্ধার করতে getString (int) বা getText (int) ব্যবহার করতে পারেন get অ্যান্ড্রয়েড ডকুমেন্টেশন।
ডকুমেন্টেশনটি দেখুন: https://developer.android.com/guide/topics/resources/string-resource.html
আশা করি এটা কাজে লাগবে.
শীর্ষে ভোট দেওয়া উত্তর সঠিক এবং সহজ। তবে, কখনও কখনও আপনি দেখতে পাবেন যে কোনও ফন্টের জন্য কাজ করছেন না, তবে অন্যদের জন্য কাজ করছেন Chinese (চাইনিজদের সাথে কথা বলার সময় আমি কোন সমস্যাটি পেয়েছি))
সমাধানটি কেবল আপনার টেক্সটভিউয়ের জন্য "Wrap_CONTENT" ব্যবহার করবেন না, কারণ লাইনটি আঁকার জন্য অতিরিক্ত স্থান নেই। আপনি আপনার টেক্সটভিউতে স্থির উচ্চতা নির্ধারণ করতে পারেন, বা অ্যান্ড্রয়েড ব্যবহার করতে পারেন: প্যাডিং ভার্টিকাল সাথে Wrap_CONTENT।
HtmlCompat.fromHtml(
String.format(context.getString(R.string.set_target_with_underline)),
HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline"><u>Set Target<u> </string>
এক্সএমএল ফাইলে এস্কেপ প্রতীকটি নোট করুন
আমার একটি সমস্যা হয়েছিল যেখানে আমি একটি কাস্টম ফন্ট ব্যবহার করছি এবং রিসোর্স ফাইল ট্রিক ( <u>Underlined text</u>
) দিয়ে তৈরি আন্ডারলাইনটি কাজ করেছে তবে অ্যান্ড্রয়েড আন্ডারলাইনটিকে একরকম স্ট্রাইক ট্রটে রূপান্তরিত করতে সক্ষম হয়েছে।
আমি এই উত্তরটি নিজের কাছে পাঠ্যদর্শনটির নীচে সীমানা আঁকতে ব্যবহার করেছি: https://stackoverflow.com/a/10732993/664449 । স্পষ্টতই এটি আংশিক আন্ডারলাইন করা পাঠ্য বা বহুবিধ পাঠ্যের জন্য কাজ করে না।