অ্যান্ড্রয়েড - টেক্সটভিউ টেক্সট স্টাইল প্রোগ্রাম্যাটিকভাবে সেট করবেন?


232

প্রোগ্রামের textStyleবৈশিষ্ট্য নির্ধারণের জন্য কি কোনও উপায় আছে TextView? কোনও setTextStyle()পদ্ধতি বলে মনে হচ্ছে না ।

পরিষ্কার হয়ে উঠতে, আমি ভিউ / উইজেট শৈলীর কথা বলছি না! আমি নিম্নলিখিত সম্পর্কে কথা বলছি:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

1
আপনি নীচের লিঙ্কটি রেফারেন্স করতে পারেন এবং শীর্ষ 1 টি উত্তর লক করতে পারেন stackoverflow.com/questions/6200533/…
টাইপ

আমার উত্তর এখানে দেখুন । আশা করি এটি আপনাকে সাহায্য করবে
সাম্মাভড জৈন

উত্তর:


410
textview.setTypeface(Typeface.DEFAULT_BOLD);

সেটটাইপফেস হ'ল অ্যাট্রিবিউট টেক্সট স্টাইল।

শঙ্কর ভি যেমন যোগ করেছেন, পূর্ববর্তী টাইপফেস বৈশিষ্ট্যগুলি সংরক্ষণ করতে আপনি ব্যবহার করতে পারেন:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

14
এটি হওয়া উচিতtextview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);
সংকর ভি

2
পূর্ববর্তী সেট ফন্টটি সংরক্ষণ করার জন্য @ ইলিয়াআরমিন আপনাকে এটি ব্যবহার করতে হবে to
সংকর ভি

@ সাঙ্কারভি মন্তব্যের ভিত্তিতে আমার উত্তর সম্পাদনা করেছে।
রাজ

13
আমি মনে করি আপনার ডিফল্টটি হোল্ড করা উচিত: holder.title.setTypeface (holder.title.getTypeface (), Typeface.BOLD);
ইমান আকবরী

আসলে textview.getTypeface().getStyle()হয়android:textStyle
পিয়ের

126

আসুন ধরা যাক আপনার মান / স্টাইলস.এক্সএমএল এ রেডহুগেটেক্সট নামে একটি স্টাইল রয়েছে:

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

এক্সএমএল লেআউট / your_layout.xML ফাইলে যথারীতি আপনার পাঠ্যদর্শনটি তৈরি করুন, আসুন বলি:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

এবং আপনার ক্রিয়াকলাপের জাভা কোডে আপনি এটি করেন:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

এটা আমার জন্য কাজ! এবং এটি রঙ, আকার, মাধ্যাকর্ষণ ইত্যাদি প্রয়োগ করেছে আমি কোনও সমস্যা ছাড়াই 8 থেকে 17 এর অ্যান্ড্রয়েড এপিআই লেভেলের হ্যান্ডসেট এবং ট্যাবলেটগুলিতে এটি ব্যবহার করেছি। নোট করুন যে অ্যানড্রয়েড 23 হিসাবে, সেই পদ্ধতিটি অবচয় করা হয়েছে। প্রসঙ্গে যুক্তিটি ফেলে দেওয়া হয়েছে, সুতরাং শেষ পংক্তিতে এটি হওয়া দরকার:

textViewTitle.setTextAppearance(R.style.RedHUGEText);

মনে রাখবেন ... এটি কেবল তখনই কার্যকর যখন পাঠের শৈলীটি আপনার জাভা যুক্তির কোনও শর্তের উপর নির্ভর করে বা আপনি কোডের সাথে UI "উড়ে" তৈরি করছেন ... যদি তা না হয় তবে কেবল এটিই ভাল just একটি করুন:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

আপনি সর্বদা এটি আপনার উপায় থাকতে পারে!


4
এটি কেবলমাত্র একটি <style>ট্যাগে সংজ্ঞায়িত করা যায় এমন বৈশিষ্ট্যের একটি উপসেট সেট করবে । এটি
সাধারণগুলি

5
মিনিট এপিআই 23 লাগবে বলে মনে হচ্ছে?
উইলিয়াম টি। ম্যালার্ড

4
দুটি পদ্ধতি রয়েছে, একটি এপি <23 এবং একটি এপি 23+ এর জন্য। <23 এর জন্য ব্যতীত এগুলি অভিন্ন প্রদর্শিত হবে একটি প্রসঙ্গ আর্গুমেন্ট নেয় এবং 23+ এর জন্য একটিটি গ্রহণ করে না। হুডের নীচে, এপিআই 23+ এর জন্য একটি <23 এর জন্য পদ্ধতিটি কল করে এবং পাঠ্যদর্শনটির জন্য সদস্য প্রসঙ্গটি ব্যবহার করে।
মিঃপ্র্লো

63

অনুসন্ধান করুন setTextAppearanceবা এছাড়াও setTextTypeface। স্ট্যাকওভারফ্লোতে একই রকম প্রশ্ন রয়েছে: রানটাইমের সময় কীভাবে পাঠ্য প্রদর্শনের স্টাইল পরিবর্তন করবেন


সেটটেক্সট অ্যাপেরেন্স এপিআই স্তরের 23
এথোস্পি

এপিআই 23+ এর জন্য একটি নতুন পদ্ধতি রয়েছে যা কেবল একটি প্রসঙ্গে যুক্তি গ্রহণ করে না।
মিঃপ্র্লো

52

এই কাজটি অর্জনের অনেকগুলি উপায় নীচে রয়েছে:

1।

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

2।

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

3।

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

4।

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

অথবা আপনি যদি এক্সএমএল মাধ্যমে চান

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

আমার এক্সএমএলে সংজ্ঞায়িত একটি কাস্টম শৈলী প্রয়োগ করার জন্য সেটটেক্সটএপরিয়েন্স () আমার উত্তর ছিল। ধন্যবাদ।
আশারিও

আমার মতে, এটি থ্রেডের সেরা উত্তর। প্রোগ্রামের জন্য কোডে কল করার জন্য অনেকগুলি বিকল্প রয়েছে
নুগেইন মিন হিয়েন

9

Kotlin Version

পাঠ্য শৈলীর পাশাপাশি বর্তমান ফন্টটি ধরে রাখতে:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

7

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

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

  1. একটি বৈশিষ্ট্য নির্ধারণ করুন
  2. আপনি যে স্টাইলটি ব্যবহার করতে চান তা তৈরি করুন
  3. আমাদের থিমটিতে সেই বৈশিষ্ট্যের জন্য একটি শৈলী প্রয়োগ করুন
  4. সেই গুণটি সহ আমাদের দৃশ্যের নতুন দৃষ্টান্ত তৈরি করুন

'Res / মান / attrs.xml' এ, একটি নতুন বৈশিষ্ট্য সংজ্ঞায়িত করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

রেস / মান / স্টাইলস.এক্সএমএলে 'আমি আমার কাস্টম টেক্সটভিউতে যে স্টাইলটি ব্যবহার করতে চাই তা তৈরি করতে চলেছি

<style name="CustomTextView">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:paddingLeft">14dp</item>
</style>

'রেস / মান / থিমস.এক্সএমএল' বা 'রেস / মান / স্টাইলস.এক্সএমএল' এ আপনার অ্যাপ্লিকেশন / ক্রিয়াকলাপের জন্য থিমটি সংশোধন করুন এবং নিম্নলিখিত শৈলীটি যুক্ত করুন:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

অবশেষে, আপনার কাস্টম টেক্সটভিউতে, আপনি এখন বৈশিষ্ট্যটির সাথে নির্মাতা ব্যবহার করতে পারেন এবং এটি আপনার স্টাইলটি গ্রহণ করবে

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
       super(context, null, R.attr.customTextView);
    }
}

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


5

এটি আমার পক্ষে কাজ করেছে

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

অথবা

textview.setTypeface(Typeface.DEFAULT_BOLD);

2

আমি দুটি সহজ পদ্ধতি দিয়ে সমাধান করেছি।

ব্যাখ্যা অনুসরণ করুন।

আমার বিদ্যমান শৈলীর ঘোষণা:

<style name="SearchInfoText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/Church_Grey</item>
    <item name="android:shadowColor">@color/Shadow_Church</item>
    <item name="android:shadowRadius">3</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
</style>

আমার অ্যান্ড্রয়েড জাভা কোড:

    TextView locationName = new TextView(getSupportActivity());
    locationName.setId(IdGenerator.generateViewId());
    locationName.setText(location.getName());
    locationName.setLayoutParams(super.centerHorizontal());
    locationName.setTextSize(24f);
    locationName.setPadding(0, 0, 0, 15);
    locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
    locationName.setShadowLayer(3, 1, 1,  getResources().getColor(R.color.Shadow_Church));

শুভেচ্ছা।


0

আপনি এটি চেষ্টা করতে পারেন

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                textView.setTextAppearance(R.style.Lato_Bold);
            } else {
                textView.setTextAppearance(getActivity(), R.style.Lato_Bold);
            }

0

যেহেতু setTextAppearance(resId)কেবলমাত্র 23 এবং ততোধিকের জন্য উপলব্ধ, তাই ব্যবহার করুন:

TextViewCompat.setTextAppearance(textViewGoesHere, resId)

এই পদ্ধতিটি অভ্যন্তরীণভাবে নিম্নলিখিত হিসাবে প্রয়োগ করা হয়েছে:

public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
    if (Build.VERSION.SDK_INT >= 23) {
        textView.setTextAppearance(resId);
    } else {
        textView.setTextAppearance(textView.getContext(), resId);
    }
}

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