টেক্সটভিউতে কীভাবে অক্ষরের ব্যবধান পরিবর্তন করবেন?


127

আমি কীভাবে পাঠ্যদ্বারে অক্ষরের ব্যবধান পরিবর্তন করতে পারি? এটিতে যদি আমার এইচটিএমএল পাঠ্য থাকে (তবে আমি আমার কোডটিতে ওয়েবভিউ ব্যবহার করতে পারি না) সাহায্য করবে।

পিএস আমি এইচটিএমএল পাঠ্যের সাহায্যে পাঠ্যদর্শনটিতে আমার নিজস্ব টাইপফেস ব্যবহার করছি।


5
লেআউট android:letterSpacing=".05"
এডিটরটিতে

উত্তর:


26

অ্যান্ড্রয়েড পরীক্ষা করুন : টেক্সটস্কেলেক্স

আপনার কতটা ব্যবধান প্রয়োজন তা নির্ভর করে এটি সাহায্য করতে পারে। এটি টেক্সটভিউ-তে অক্ষরের ব্যবধানের সাথে দূরবর্তীভাবে সম্পর্কিত thing

সম্পাদনা করুন: দয়া করে এপিআই 21 (ললিপপ) দিয়ে শুরু করার জন্য এটি আপডেট করার জন্য আরও উন্নততর পদ্ধতির জন্য নীচে @ জেরব্যাক জাকুবের প্রতিক্রিয়া দেখুন


9
আপনি কীভাবে অক্ষরের ব্যবধানে এটি অনুবাদ করবেন?
এরিক নোভিনস 10:58

92
বর্ণ / অক্ষরের মধ্যে স্থান বাড়াতে / হ্রাস করার কোনও উপায় আছে কি? টেক্সটস্কেলেক্স - সাহিত্যিকরা অক্ষর / অক্ষরকে স্কেল করে।
কায়মাট্রিক্স

2
@ বার্টস এর উত্তর যা প্রশ্ন জিজ্ঞাসা করছে তা করে
বুকুরজিয়াস

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

2
আমি জানি না কীভাবে এই সমাধানটি এতগুলি উপভোগ করেছে (+৩৩, -২৪) লোকেরা কি অন্ধভাবে তাদের ভোট দিচ্ছে? letterSpacingবনাম textScaleXকী বিশাল পার্থক্য
জিমিত প্যাটেল

230

এপিআই 21 যেহেতু একটি বিকল্প সেট চিঠি ব্যবধান রয়েছে। আপনি পদ্ধতি সেটলেটারস্পেসিংটি কল করতে পারেন বা এট্রিবিউট লেটারস্পেসিং সহ এটি এক্সএমএলে সেট করতে পারেন ।


1
এক্সএমএল সেট করার সময় এটি আসলে কাজ করে না। আমি এর মতো একটি ত্রুটি "1.2dp" in attribute "letterSpacing" cannot be converted to float."
পেয়েছি

20
@ দোপাট্রামন আপনাকে ইউনিটগুলি বাদ দিতে হবে, কেবলমাত্র মান টাইপ করতে হবে: অ্যান্ড্রয়েড: লেটারস্পেসিং = "1.2" অ্যান্ড্রয়েডের পরিবর্তে: লেটারস্পেসিং = "1.2 ডিপি"
জেরাবাকজাকুব

12
31% ডিভাইসগুলি API 21 সমর্থন করে না তা জেনেও আপনি পূর্ববর্তী সংস্করণগুলিতে কীভাবে এটি করবেন?
নিনজানির

25
নোট করুন যে লেটারস্পেসিংয়ের মান ডিপি / এসপিতে নয়, এটি 'ইএম' ইউনিটে রয়েছে। সামান্য প্রসারণের জন্য সাধারণ মানগুলি 0.05 এর কাছাকাছি হবে। নেতিবাচক মানগুলি পাঠ্যকে শক্ত করে।
ক্রিশান

25
কিছু কারণে letterSpacingAS পূর্বরূপে পরিবর্তন করা হয়নি। পরিবর্তনটি দেখতে আমাকে আসলে একটি দৈহিক ডিভাইসে অ্যাপটি চালাতে হয়েছিল।
ড্রউ জুরকো

46

আরো স্থান:

  android:letterSpacing="0.1"

কম স্থান:

 android:letterSpacing="-0.07"

2
ডিফল্ট লেটারস্পেসিং কি?
শিবাম

3
ডিফল্টটি letterSpacing0.0. বিকাশকারী
Android.com/references/android/widget/…

হতে পারে আপনার উত্তরতে @ ইভিন 1_ এর মন্তব্য যুক্ত করুন
সার্থক মিত্তাল

সর্বাধিক এবং সর্বনিম্ন লেটারস্পেসিং কী সমর্থন করে?
জিমিত প্যাটেল

26

এই উত্তর পেড্রোর উত্তরের উপর ভিত্তি করে তবে অ্যাডজাস্ট করা হয়েছে তাই পাঠ্য বৈশিষ্ট্যটি ইতিমধ্যে সেট করা থাকলে এটিও কাজ করে:

package nl.raakict.android.spc.widget;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ScaleXSpan;
import android.util.AttributeSet;
import android.widget.TextView;


public class LetterSpacingTextView extends TextView {
    private float letterSpacing = LetterSpacing.BIGGEST;
    private CharSequence originalText = "";


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

    public LetterSpacingTextView(Context context, AttributeSet attrs){
        super(context, attrs);
        originalText = super.getText();
        applyLetterSpacing();
        this.invalidate();
    }

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

    public float getLetterSpacing() {
        return letterSpacing;
    }

    public void setLetterSpacing(float letterSpacing) {
        this.letterSpacing = letterSpacing;
        applyLetterSpacing();
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        originalText = text;
        applyLetterSpacing();
    }

    @Override
    public CharSequence getText() {
        return originalText;
    }

    private void applyLetterSpacing() {
        if (this == null || this.originalText == null) return;
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i < originalText.length(); i++) {
            String c = ""+ originalText.charAt(i);
            builder.append(c.toLowerCase());
            if(i+1 < originalText.length()) {
                builder.append("\u00A0");
            }
        }
        SpannableString finalText = new SpannableString(builder.toString());
        if(builder.toString().length() > 1) {
            for(int i = 1; i < builder.toString().length(); i+=2) {
                finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        super.setText(finalText, BufferType.SPANNABLE);
    }

    public class LetterSpacing {
        public final static float NORMAL = 0;
        public final static float NORMALBIG = (float)0.025;
        public final static float BIG = (float)0.05;
        public final static float BIGGEST = (float)0.2;
    }
}

আপনি যদি এটি প্রোগ্রামক্রমে ব্যবহার করতে চান:

LetterSpacingTextView textView = new LetterSpacingTextView(context);
textView.setSpacing(10); //Or any float. To reset to normal, use 0 or LetterSpacingTextView.Spacing.NORMAL
textView.setText("My text");
//Add the textView in a layout, for instance:
((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);

এটি কি আসলেই অক্ষরের মধ্যে ফাঁকা স্থান যুক্ত হয়? বো ... কেউ যদি এই পাঠ্যটি অনুলিপি করে তবে এতে অতিরিক্ত স্থান অন্তর্ভুক্ত থাকবে। না-জয়
johnw182

একটি nullচেক ইন প্রয়োজন applyLetterSpacing, কিন্তু তা ছাড়া জীবন রক্ষাকারী!
বার্ট ভ্যান নাইরোপ

আপনি যখন পাঠ্যগুলি পরবর্তীকৃত সেটগুলি সেট করেন তখন কাজ করে না এবং পরে প্রোগ্রামাগুলিভাবে স্পেসিং প্রয়োগ করে
জোনাথন

@ জোনির এটি হওয়া উচিত, আমার এটির মতো কাজ করা উচিত। আপনি একটি উদাহরণ পাঠাতে পারেন?
বার্ট বার্গ

1
নন-ব্রেক-স্পেস - "\ u00A0" - সত্যই দরকারী। ধন্যবাদ
শায়ান_আরয়ান

11

এপিআই> = 21 এর পরে টেক্সটভিউ দ্বারা সরবরাহ করা ইনবিল্ড পদ্ধতি রয়েছে setLetterSpacing

আরও জন্য এই পরীক্ষা করুন


3
<21 এ কীভাবে একই রকম করতে পারেন?
রাহুল দেবনাভর

2
যদি (বিল্ড.ভি.এস.আর। } অন্য {this.setTextScaleX (getRes উত্স ()। getDimesion (আর। }
মৌলিক প্যাটেল


0

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


-1

আপনার পাঠ্যদর্শনটিতে এইচটিএমএল পাঠ্য এম্বেড করার জন্য আপনি Html.fromHTML()বাক্য গঠন ব্যবহার করতে পারেন । আরও তথ্য আপনি http://developer.android.com/references/android/text/Html.html#fromHtml%28java.lang.String%29 থেকে পাবেন


1
কিভাবে এই সাহায্য করে? আমি একটি টেক্সটভিউতে কাজ করে এমন বর্ণের ব্যবধানের জন্য এইচটিএমএল ট্যাগ সম্পর্কে অবগত নই।
2col
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.