জাভা কোড ব্যবহার করে এসপি ভ্যালুতে টেক্সট সাইজ কীভাবে নির্ধারণ করা যায়


205

আমি যদি TextViewজাভা কোড ব্যবহার করে নির্দিষ্ট পাঠ্যের আকার পরিবর্তন করতে একটি পূর্ণসংখ্যার মান নির্ধারণ করি তবে মানটি পিক্সেল ( px) হিসাবে ব্যাখ্যা করা হয় ।

এখন কেউ কীভাবে এটি নির্ধারণ করতে জানে sp?

উত্তর:


535

http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29

উদাহরণ:

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);

18
যেহেতু এসপি স্কেলড পিক্সেল বোঝায় আপনার পর্দার ঘনত্ব দ্বারা আকার হ্রাস করতে হবে। এটি সহজেই নিম্নরূপভাবে সম্পন্ন হয়েছে: SCREEN_DENSITY = getRes Source ()। GetDisplayMetrics ()। ঘনত্ব; আপনারভিউ.সেটসেক্সটসাইজ (টাইপডভ্যালিউ.সি.এম.পি.এল.এক্স.ইউএনআইএসপি, (কাঙ্ক্ষিত পাঠ্য হাইটইএনএসপি / এসসিআরএন_ডেনসিটি));
পিটএইচ

4
আমি যখন রিসোর্স থেকে এসপি সংগ্রহ করার চেষ্টা করেছি তখন সমাধানটি আমার পক্ষে কার্যকর হয়নি। পিটএইচ, আপনি আমাকে সঠিক পথে পেয়েছেন! নিম্নলিখিতটি আমার জন্য কৌশলটি করেছে: ... ফ্ল্যাট টেক্সট সাইজ = getRes উত্স () .গেটডাইমেনশন (আর.ডাইমেন.টেক্সটসাইজ) / গেটআরসোর্সস ()। GetDisplayMetrics ()। ঘনত্ব; myTextView.setTextSize (typedValue.COMPLEX_UNIT_SP, টেক্সট সাইজ);
পি কুয়েজার্স

52
আপনি যদি আপনার সংস্থানগুলি থেকে এসপি আকার পান, আপনার এই জাতীয় COMPLEX_UNIT_PX ব্যবহার করা উচিত: textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));আপনার পাঠ্য আকারটি এইভাবে পাওয়া ইতিমধ্যে এসপিটিকে পিএক্সে রূপান্তরিত করবে, পর্দার ঘনত্ব এবং পাঠ্য স্কেল উভয় ফ্যাক্টরকে বিবেচনা করে।
সিসকে বোকেলো

প্রদত্ত সমাধানটি আমার জন্য দেখানো মত কাজ করেছে। ধন্যবাদ!
মার্টিন এরিক

35

আপনি একটি ব্যবহার করতে পারেন DisplayMetricsপিক্সেল এবং ছোটো পিক্সেল মধ্যে সাহায্য রূপান্তর করতে বস্তুর scaledDensityবৈশিষ্ট্য

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity; 

1
এটি স্ক্রিনের ঘনত্ব স্কেলিং ফ্যাক্টরটিকে অ্যাকাউন্টে নেবে তবে ব্যবহারকারীরা সেটিংসের মাধ্যমে নির্দিষ্ট করতে পারেন এমন পাঠ্য স্কেল ফ্যাক্টরটি নয়। আমি বিশ্বাস করি @ সন্তোষের সমাধান এই বিষয়টিকে বিবেচনায় নেবে যদিও এই স্নিপেটটি তা করে না।
গ্রেগ 7gkb

3
তবে কখনও কখনও আপনি যখন @ ক্যানভাসে একটি পেইন্ট লেখেন তখন আপনি @ সন্তোষের পদ্ধতিটি ব্যবহার করতে পারবেন না। তারপরে এই পদ্ধতিটি কাজে আসে এবং বেশ ভালভাবে কাজ করে, সুতরাং এই দুটি উত্তরের জন্য থাম্ব!
বাইমুট করুন

1
@ গ্রেগ 7gkb সত্য নয়, ডকুমেন্টেশন বলছে may be adjusted in smaller increments at runtime based on a user preference for the font sizeযাতে ফন্টের আকারটি বিবেচনায় নেওয়া হবে
লুকা ভিটুচি

32

ক্লিনার এবং আরও পুনরায় ব্যবহারযোগ্য পদ্ধতি হল

ডিরেক্টরি dimens.xmlভিতরে ফাইলের পাঠ্য আকার নির্ধারণ করুন res/values/:

</resources>
   <dimen name="text_medium">14sp</dimen>
</resources>

এবং তারপরে এটি প্রয়োগ করুন TextView:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));

20

উত্সের কোডের ভিত্তিতে setTextSize:

public void setTextSize(int unit, float size) {
    Context c = getContext();
    Resources r;

    if (c == null)
        r = Resources.getSystem();
    else
        r = c.getResources();

    setRawTextSize(TypedValue.applyDimension(
        unit, size, r.getDisplayMetrics()));
}

আমি এই ফাংশনটি পিক্সেলগুলিতে কোনও ডিমেনশন ক্যালিউট করার জন্য তৈরি করি:

int getPixels(int unit, float size) {
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    return (int)TypedValue.applyDimension(unit, size, metrics);
}

যেখানে ইউনিট কিছু হয় TypedValue.COMPLEX_UNIT_SP


শেষ পদ্ধতিটি জীবন রক্ষাকারী।
আজিবোলা

12

ডিফল্ট সেট টেক্সটসাইজ অনুসারে, এসপিতে ইউনিট কাজ না করে (স্কেলগুলি পিক্সেল)

public void setTextSize (float size) 
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This 
size is adjusted based on the current density and user font size preference.

11

ধন্যবাদ @ জন লিহে এবং @ পিটারএইচ:

desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);

আপনি যদি আপনার মাত্রা.এক্সএমএলে আর.ডিইমেন.ডিজায়ার_এসপি 25 থেকে সংজ্ঞায়িত করেন তবে জিনিসটি হ'ল

  1. নন-এইচডি ডিভাইসে: কাঙ্ক্ষিত এসপিটি এখনও 25, ঘনত্ব = 1
  2. এইচডি ডিভাইসে (যেমন নেক্সাস 7 তৃতীয় প্রজন্মের মতো): কাঙ্ক্ষিত এসপি 50 ইশ, ঘনত্ব = 2 হয়ে যায়

11

যখন গৃহীত উত্তরটি কাজ না করে (উদাহরণস্বরূপ পেইন্টের সাথে কাজ করার সময়) আপনি ব্যবহার করতে পারেন:

float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);

ঠিক আছে, এটি কাজ করে, আমি যা চাই তা ভাগ করে নেওয়ার জন্য ধন্যবাদ পোমার!
পার্ক ইউন নিউল

8
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
                       context.getResources().getDimension(R.dimen.text_size_in_dp))

দয়া করে ব্যাখ্যা করুন কীভাবে পাঠ্যের আকারটিকে পিক্সেল মান (COMPLEX_UNIT_PX) হিসাবে সেট করা সহায়ক হবে। ওপি "এসপি মূল্যে পাঠ্যের আকার নির্ধারণ করতে" চায়
Bö macht Blau

আপনি যদি ব্যবহার করেন তবে আপনাকে COMPLEX_UNIT_PXঘনত্বকে ভাগ করতে হবে।
উইলিয়াম হু

আমি মনে করি কারণ এটি ডাইমেনশন ইতিমধ্যে 'ডিপি' কে 'পিক্সে' রূপান্তর করেছে
আলী মুসাভি খেরাদ


0

সমস্ত সমাধানের চেষ্টা করার পরেও এবং গ্রহণযোগ্য কোনও ফলাফল দেওয়ার পরেও (সম্ভবত আমি ডিফল্ট খুব বড় ফন্টের সাথে একটি ডিভাইসে কাজ করছিলাম কারণ), নিম্নলিখিতগুলি আমার জন্য কাজ করেছে (COMPLEX_UNIT_DIP = ডিভাইস ইন্ডিপেন্ডেন্ট পিক্সেল):

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

0

এপি স্তর 1 থেকে আপনি public void setTextSize (float size)পদ্ধতিটি ব্যবহার করতে পারেন ।

ডকুমেন্টেশন থেকে:

প্রদত্ত মানটিতে ডিফল্ট পাঠ্য আকার সেট করুন, "স্কেলড পিক্সেল" ইউনিট হিসাবে ব্যাখ্যা করা। এই আকারটি বর্তমান ঘনত্ব এবং ব্যবহারকারী ফন্টের আকারের পছন্দ অনুসারে সামঞ্জস্য করা হয়েছে।

পরামিতি: আকার -> ভাসা: স্কেলড পিক্সেল আকার।

সুতরাং আপনি সহজ করতে পারেন:

textView.setTextSize(12); // your size in sp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.