টেক্সটভিউর সমস্ত অক্ষরের বড় হাতের অক্ষরে স্টাইল করার কী উপায় আছে?


239

আমি একটি এক্সএমএল অ্যাট্রিবিউট বা শৈলীর একটি নির্ধারণ করতে সক্ষম হতে চাই TextViewযা সমস্ত কপিরাইট লেটারগুলিতে যা কিছু পাঠ্য তা তৈরি করবে।

বৈশিষ্ট্যগুলি android:inputType="textCapCharacters"এবং android:capitalize="characters"কিছুই না করে দেখে মনে হয় এটি ব্যবহারকারীর ইনপুটযুক্ত পাঠ্যের জন্য, একটি নয় TextView

আমি এটি করতে চাই তাই আমি সামগ্রী থেকে শৈলী পৃথক করতে পারি। আমি জানি যে আমি এই প্রোগ্রামটিগতভাবে করতে পারি তবে আবার আমি চাই শৈলীটি সামগ্রী এবং কোডের বাইরে রাখতে পারি।


1
উভয়ই ইনপুটটাইপ = "টেক্সটক্যাপচারাকটারস", টেক্সটএলক্যাপস = "সত্য" স্মাগ ফ্যামিলি works তে কাজ করে ^^ আমি আমার সম্পাদনা পাঠ্যে টেক্সট ওয়াচারকে যুক্ত করেছি যা সমস্ত শব্দকে ক্যাপ করে
রাখে

উত্তর:


357

আমি যদিও এটি বেশ যুক্তিসঙ্গত অনুরোধ ছিল তবে মনে হচ্ছে আপনি এই মুহুর্তে এটি করতে পারবেন না। কি মোট ব্যর্থতা। হাঃ হাঃ হাঃ

হালনাগাদ

আপনি এখন সমস্ত ক্যাপ জোর করে পাঠ্যআলক্যাপ ব্যবহার করতে পারেন ।


14
পাঠ্যদর্শন বৈশিষ্ট্যাবলীর অভাব অবশ্যই আছে। বৈশিষ্ট্য ফোল্ডার থেকে একটি টিটিএফও বরাদ্দ করা ভাল হবে!
নাথান শোয়ারম্যান

8
লিঙ্কযুক্ত প্রশ্নের উত্তরগুলির মধ্যে একটি 'অ্যান্ড্রয়েডের পরামর্শ দেয়: টেক্সটএলক্যাপস = "সত্য" "এটি আমার পক্ষে কাজ করেছে।
ব্লেফি

@ ব্লাফি আপডেটের জন্য ধন্যবাদ। অ্যান্ড্রয়েড: টেক্সটএলক্যাপস = "সত্য" সঠিকভাবে কাজ করে কিনা তা আমি যাচাই করব।
টেরেন্স

1
আপনি "টেক্সটআলক্যাপস" ব্যবহার করে এটি করতে পারেন, তাই ডাউনভোট।
জয়দীপডাব্লু

1
textAllCapsআপনি নির্দিষ্ট করে থাকলে অ্যাপটিকে ক্রাশ হওয়ার মতো মনে android:fontFamilyহয় themes.xml
আলা এম।

142

8
@ লারহাম 1 এটি একটি এক্সএমএল বৈশিষ্ট্য তাই এটি আর কীভাবে ব্যবহার করা যায় তা আমি দেখতে পাই না। যদি কাজ না করে থাকে তবে গুগলে রিপোর্ট করুন। আমি মনে করি এটি সেটেলক্যাপস (বুলিয়ান) এর মতো এপিআই স্তরের 14 এর মধ্যে সীমাবদ্ধ।
মার্ফি

1
আমি এটি পরীক্ষা করেছি এবং এটি কাজ করছে। আমার কাছে একটি বাহ্যিক স্টাইল ফাইল রয়েছে
ইভিওকিং

1
@ মারফি হ্যাঁ, এটি একটি সংস্করণ সমস্যা। সেটএলক্যাপস () এর জন্য এসডিকে 14 এবং তার বেশি; এক্সএমএল কখন যুক্ত হয়েছিল তা পরিষ্কার নয়, তবে আমি এসডিকে 14ও ধরে নিয়েছি।
লারহাম 1

এটি আশ্চর্যের বিষয়, টেক্সটআলক্যাপস একটি সাধারণ পরীক্ষা প্রকল্পে কাজ করে তবে অ্যারেএডাপ্টার.জেটভিউ () এর ভিতরে যখন ভিউটি তৈরি করা হয় তখন তা হয় না। সবকিছুই কাজ করে: ব্যাকগ্রাউন্ড, টেক্সট স্টাইল ইত্যাদি but তবে টেক্সটএলক্যাপস এটি করে না :(
Y2i

1
@ জাওয়াদলিওওয়াদী আপনি এপিআই 14 এর আগে এই এক্সএমএল বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না Java জাভা কোডে আপনাকে এটি ম্যানুয়ালি করতে হবে।
মার্ফি

63

পুরানো এপিআই (14 এর কম) সমর্থন করে অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে অ্যাপকোম্প্যাট ব্যবহার করেtextAllCaps

একটি ইউআই উইজেট রয়েছে যা কমপ্যাটেক্সটভিউ নামের অ্যাপকম্প্যাট সহ জাহাজগুলি হ'ল একটি কাস্টম টেক্সটভিউ এক্সটেনশন যা টেক্সটএলক্যাপসের জন্য সমর্থন যোগ করে

আরও নতুন অ্যান্ড্রয়েড এপিআই> 14 এর জন্য আপনি ব্যবহার করতে পারেন:

android:textAllCaps="true"

একটি সাধারণ উদাহরণ:

<android.support.v7.internal.widget.CompatTextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:textAllCaps="true"/>

উত্স: বিকাশকারী.অ্যান্ড্রয়েড

হালনাগাদ:

এটি হ'ল কমপ্যাটেক্সটভিউটি সর্বশেষ অ্যাপকম্প্যাট-ভি 7 লাইব্রেরিতে অ্যাপকম্প্যাটটেক্সটভিউ দ্বারা প্রতিস্থাপিত হয়েছিল ~ ইউজেন পেচানেক


আপনি কি android.support.v7.in অন্তর্নিহিত অভ্যন্তরীণ লক্ষ্য করেছেন? অভ্যন্তরীণ হিসাবে সমর্থন লাইব্রেরির পরবর্তী সংস্করণে আর কিছু না থাকতে পারে?
ইমানুয়েল মেকলিন

1
এটা সত্যিই দারুন! @ ইমানুয়েলমেকলিন আপনার প্রকল্পে একবার আসার পরে এটি যাদুকরভাবে কোনও পথ চালাচ্ছে না।
ইউজেন পেচানেক

@ ইউজেন অবশ্যই আপনি সমর্থন লাইব্রেরিটি সর্বশেষ সংস্করণে আপডেট করেন না যেহেতু গুগল কখনই দরকারী কিছু যোগ করে না, তাই না?
ইমানুয়েল মেকলিন

@EmanuelMoecklin বাস্তবিক আমি প্রায়ই এত তাড়াতাড়ি আপডেট এটা আমার কোড ভঙ্গ: দ্বি সম্পূর্ণভাবে সম্মত হন যে আপনি অভ্যন্তরীণ সম্পদ ব্যবহার সতর্ক থাকবেন কিন্তু আমি শুধু appcompat-v7 উৎস এক নজরে নিয়ে যায় এবং CompatTextViewব্যবহার করা হয় ScrollingTabCointainerView, যা ব্যবহার করা হয় ToolbarWidgetWrapper, যা প্রশংসনীয় নতুন শোনাচ্ছে কিনা এবং নামটি যতক্ষণ না "v7" এর নামে রাখে, এটি আমার পক্ষে CompatTextViewএটি যেখানে রয়েছে সেখানেই চলে যাওয়ার যথেষ্ট গ্যারান্টি ।
ইউজেন পেচানেক

2
@ ইমানুয়েলমেকলিন যেমনটি ঘটে CompatTextViewতখন AppCompatTextViewসর্বশেষ অ্যাপকম্প্যাট-ভি 7 লাইব্রেরিতে প্রতিস্থাপন করা হয়েছিল। আপনি বেশ সঠিক ছিল।
ইউজেন পেচানেক

30

এটি সত্যিই খুব হতাশাব্যঞ্জক যে আপনি এটি স্টাইল ( <item name="android:textAllCaps">true</item>) দ্বারা বা প্রতিটি এক্সএমএল লেআউট ফাইলটিতে টেক্সটএলক্যাপস বৈশিষ্ট্য সহ করতে পারবেন না এবং এটি করার একমাত্র উপায় হ'ল আপনি যখন স্ট্রিংয়ের প্রতিটি ক্ষেত্রে স্ট্রিং. টুআপারকেস () ব্যবহার করছেন তখন একটি পাঠ্য ভিউএক্সএক্সএক্সএক্স.সেটেক্সট (স্ট্রিং)।

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

কমপক্ষে, যদি ডিজাইনের পরিবর্তন হয় বা ভবিষ্যতের সংস্করণগুলিতে আমার মূলধন পাঠ্য মুছে ফেলার প্রয়োজন হয়, লেআউট ফাইলগুলিতে আমার কেবল সাধারণ টেক্সটভিউতে পরিবর্তন দরকার।

এখন, বিবেচনায় রাখুন যে আমি এটি করেছি কারণ অ্যাপের ডিজাইনার প্রকৃতপক্ষে মূল অ্যাপ্লিকেশন জুড়েই এই পাঠ্যটি (শিরোনামগুলি) অ্যাপ্লিকেশনটিতে চেয়েছিলেন এবং মূল টেক্সটভিউগুলিও ছিল যেখানে মূলধনটি আসল সামগ্রীর সাথে আসে ।

এই শ্রেণি:

package com.realactionsoft.android.widget;

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.ViewTreeObserver; 
import android.widget.TextView;


public class CapitalizedTextView extends TextView implements ViewTreeObserver.OnPreDrawListener {

    public CapitalizedTextView(Context context) {
        super(context);
    }

    public CapitalizedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CapitalizedTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(text.toString().toUpperCase(), type);
    }

}

এবং যখনই আপনার এটি ব্যবহারের প্রয়োজন হবে, কেবলমাত্র এটি এক্সএমএল লেআউটে সমস্ত প্যাকেজ সহ ঘোষণা করুন:

<com.realactionsoft.android.widget.CapitalizedTextView 
        android:id="@+id/text_view_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

কিছু যুক্তি দিবে যে টেক্সটভিউতে পাঠ্য স্টাইল করার সঠিক উপায়টি একটি স্প্যানিয়েবল স্ট্রিং ব্যবহার করা , তবে আমি মনে করি এটি আরও বেশি পরিমাণে হবে, বেশি সংস্থান গ্রহণের কথা উল্লেখ না করা কারণ আপনি টেক্সটভিউয়ের চেয়ে আরও একটি শ্রেণি ইনস্ট্যান্ট করছেন।


9

আমি এমন একটি সমাধান নিয়ে এসেছি যা র্যাকজোর সাথে একই রকম হয় যে আমি এমন একটি সাবক্লাসও তৈরি করেছি যার একটি TextViewপাঠ্যকে উপরের ক্ষেত্রে তৈরি করে তোলে।

পার্থক্যটি হ'ল setText()পদ্ধতিগুলির মধ্যে একটিটিকে ওভাররাইড করার পরিবর্তে , আমি TextViewAPI 14+ এ আসলে কী করে তার একটি অনুরূপ পন্থা ব্যবহার করেছি (যা আমার পরিচ্ছন্নতার দিক থেকে একটি পরিষ্কার সমাধান)।

আপনি যদি উত্সটি সন্ধান করেন তবে আপনি এর বাস্তবায়ন দেখতে পাবেন setAllCaps():

public void setAllCaps(boolean allCaps) {
    if (allCaps) {
        setTransformationMethod(new AllCapsTransformationMethod(getContext()));
    } else {
        setTransformationMethod(null);
    }
}

AllCapsTransformationMethodবর্গ (বর্তমানে) সর্বজনীন নয়, কিন্তু এখনও, উৎস হয় প্রাপ্তিসাধ্য । আমি সেই শ্রেণিটিকে কিছুটা সরলীকৃত করেছি ( setLengthChangesAllowed()পদ্ধতিটি সরিয়ে ফেলেছি ), সুতরাং সম্পূর্ণ সমাধানটি হ'ল:

public class UpperCaseTextView extends TextView {

    public UpperCaseTextView(Context context) {
        super(context);
        setTransformationMethod(upperCaseTransformation);
    }

    public UpperCaseTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTransformationMethod(upperCaseTransformation);
    }

    public UpperCaseTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setTransformationMethod(upperCaseTransformation);
    }

    private final TransformationMethod upperCaseTransformation =
            new TransformationMethod() {

        private final Locale locale = getResources().getConfiguration().locale;

        @Override
        public CharSequence getTransformation(CharSequence source, View view) {
            return source != null ? source.toString().toUpperCase(locale) : null;
        }

        @Override
        public void onFocusChanged(View view, CharSequence sourceText,
                boolean focused, int direction, Rect previouslyFocusedRect) {}
    };
}

2

দেখে মনে হচ্ছে মোবাইল কীপ্যাড সেটিংয়ে অনুমতি রয়েছে তাই এটি করার সহজতম উপায় হ'ল:

editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

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


1

পিক্সলিউআই প্রকল্প আপনাকে পাঠ্যদর্শনের যে কোনও পাঠ্যদর্শন বা সাবক্লাসে টেক্সটআলক্যাপগুলি ব্যবহার করতে পারবেন যার মধ্যে রয়েছে: বোতাম, সম্পাদনা পাঠ্য স্বয়ংসম্পূর্ণতা সম্পাদনা পাঠ্য বাক্স রেডিওবটন এবং আরও বেশ কয়েকটি।

অ্যান্ড্রয়েড উত্স থেকে পরিবর্তিত পিক্সলুই সংস্করণ ব্যবহার করে আপনাকে আপনার পাঠ্যদর্শনগুলি তৈরি করতে হবে, যার অর্থ আপনার এটি করতে হবে:

<com.neopixl.pixlui.components.textview.TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        pixlui:textAllCaps="true" />

পিক্সালুআই আপনাকে একটি কাস্টম টাইপফেস / ফন্ট সেট করতে দেয় যা আপনি নিজের সম্পদ ফোল্ডারে রেখেছেন।

আমি পিক্সলুআই কাঠামোর একটি গ্রেডাল কাঁটাচামচ নিয়ে কাজ করছি যা গ্রেড ব্যবহার করে এবং মূল প্রজেক্টের মতো ইনলাইন প্রয়োজনের পরিবর্তে স্টাইল থেকে টেক্সটএলক্যাপস এবং টাইপফেস নির্দিষ্ট করার অনুমতি দেয়।

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