পটভূমি
অনেক সময় আমাদের দেওয়া সীমানায় টেক্সটভিউয়ের ফন্টটি স্বয়ংক্রিয়ভাবে ফিট করতে হবে।
সমস্যাটি
দুঃখিতভাবে, যদিও অনেক থ্রেড এবং পোস্ট (এবং প্রস্তাবিত সমাধান) (উদাহরণ এই সমস্যা সম্পর্কে কথা বলা হয় এখানে , এখানে এবং এখানে ), তাদের কেউ আসলে ভাল কাজ।
এ কারণেই, আমি আসল চুক্তি না পাওয়া পর্যন্ত আমি তাদের প্রত্যেকটি পরীক্ষা করার সিদ্ধান্ত নিয়েছি।
আমি মনে করি যে এই জাতীয় পাঠ্য ভিউয়ের প্রয়োজনীয়তাগুলি হ'ল:
কোনও ফন্ট, টাইপফেস, স্টাইল এবং অক্ষরের সেট ব্যবহার করার অনুমতি দেওয়া উচিত।
প্রস্থ এবং উচ্চতা উভয়ই পরিচালনা করা উচিত
সীমাবদ্ধতার কারণে পাঠ্য মাপসই না করা যায় না কোনও ছাঁটাই, আমরা এটি দিয়েছি (উদাহরণ: খুব দীর্ঘ পাঠ্য, খুব ছোট উপলব্ধ আকার)। তবে আমরা চাইলে অনুভূমিক / উল্লম্ব স্ক্রোলবারের জন্য অনুরোধ করতে পারি, কেবল সেই ক্ষেত্রে cases
মাল্টি-লাইন বা একক-লাইনের অনুমতি দেওয়া উচিত। একাধিক-লাইনের ক্ষেত্রে, সর্বাধিক ও মিনিট লাইনের অনুমতি দিন allow
গণনায় ধীর হওয়া উচিত নয়। সেরা আকার সন্ধানের জন্য একটি লুপ ব্যবহার করছেন? কমপক্ষে এটি অপ্টিমাইজ করুন এবং প্রতিবার আপনার নমুনাটিকে 1 দ্বারা বাড়িয়ে তুলবেন না।
মাল্টি-লাইনের ক্ষেত্রে, পুনরায় আকার দেওয়ার বা আরও বেশি লাইন ব্যবহার করার অনুমতি দেওয়া উচিত এবং / অথবা "\ n" অক্ষরটি ব্যবহার করে লাইনগুলি নিজেরাই বেছে নেওয়ার অনুমতি দেওয়া উচিত।
আমি কি চেষ্টা করেছি
আমি অনেকগুলি নমুনা চেষ্টা করেছি (লিঙ্কগুলি সহ, আমি লিখেছি) এবং আমি কেসগুলি পরিচালনা করার জন্য সেগুলি সংশোধন করার চেষ্টা করেছি, যার বিষয়ে আমি কথা বলেছি, তবে বাস্তবে কোনওটিই কাজ করে না।
আমি একটি নমুনা প্রকল্প তৈরি করেছি যা আমাকে টেক্সটভিউ স্বয়ংক্রিয়ভাবে ফিট করে কিনা তা চাক্ষুষভাবে দেখার অনুমতি দেয়।
বর্তমানে, আমার নমুনা প্রকল্পটি কেবলমাত্র পাঠ্যটি (ইংরেজী বর্ণমালা প্লাস অঙ্কগুলি) এবং পাঠ্য ভিউয়ের আকারটিকে এলোমেলো করে তোলে এবং এটি একক লাইনের সাথে থাকতে দেয়, তবে আমি যে নমুনা চেষ্টা করেছি তার কোনওটিতে এটি ভাল কাজ করে না।
এখানে কোড (এছাড়াও উপলব্ধ এখানে ):
ফাইল res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">
<Button android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" android:text="Button" />
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_above="@+id/button1"
android:layout_alignParentLeft="true" android:background="#ffff0000"
android:layout_alignParentRight="true" android:id="@+id/container"
android:layout_alignParentTop="true" />
</RelativeLayout>
ফাইল src/.../MainActivity.java
public class MainActivity extends Activity
{
private final Random _random =new Random();
private static final String ALLOWED_CHARACTERS ="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ViewGroup container=(ViewGroup)findViewById(R.id.container);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
container.removeAllViews();
final int maxWidth=container.getWidth();
final int maxHeight=container.getHeight();
final FontFitTextView fontFitTextView=new FontFitTextView(MainActivity.this);
final int width=_random.nextInt(maxWidth)+1;
final int height=_random.nextInt(maxHeight)+1;
fontFitTextView.setLayoutParams(new LayoutParams(width,height));
fontFitTextView.setSingleLine();
fontFitTextView.setBackgroundColor(0xff00ff00);
final String text=getRandomText();
fontFitTextView.setText(text);
container.addView(fontFitTextView);
Log.d("DEBUG","width:"+width+" height:"+height+" text:"+text);
}
});
}
private String getRandomText()
{
final int textLength=_random.nextInt(20)+1;
final StringBuilder builder=new StringBuilder();
for(int i=0;i<textLength;++i)
builder.append(ALLOWED_CHARACTERS.charAt(_random.nextInt(ALLOWED_CHARACTERS.length())));
return builder.toString();
}
}
প্রশ্নটি
আসলে কাজ করে এমন সাধারণ সমস্যাটির সমাধান সম্পর্কে কি কেউ জানেন?
এমনকি এমন একটি সমাধানে যা আমি কম লিখেছি তার বৈশিষ্ট্যগুলি উদাহরণস্বরূপ এমন একটি যা কেবলমাত্র ধ্রুবক পাঠ্য রেখা থাকে এবং তার ফন্টটিকে তার আকার অনুসারে সামঞ্জস্য করে, তবুও কখনও অদ্ভুত বিভ্রান্তি থাকে না এবং পাঠ্যটি খুব বেশি পাওয়া যায় না বৃহত / ছোট তার উপলব্ধ স্থানের তুলনায়।
গিটহাব প্রকল্প
যেহেতু এটি একটি গুরুত্বপূর্ণ টেক্সটভিউ, তাই আমি একটি লাইব্রেরি প্রকাশের সিদ্ধান্ত নিয়েছি, যাতে প্রত্যেকে সহজেই এটি ব্যবহার করতে এবং এখানে অবদান রাখতে পারে ।