पृष्ठभूमि
कई बार हमें टेक्स्ट व्यू के फॉन्ट को ऑटो करके उसे दी गई सीमाओं तक पहुँचाने की आवश्यकता होती है।
समस्या
दुख की बात है, भले ही वहाँ कई धागे और पोस्ट (और सुझाव दिया समाधान) (उदाहरण के लिए इस समस्या के बारे में बात कर रहे हैं यहाँ , यहाँ और यहाँ ), उनमें से कोई भी वास्तव में अच्छी तरह से काम करते हैं।
इसीलिए, मैंने उनमें से प्रत्येक का परीक्षण तब तक करने का निर्णय लिया है जब तक कि मैं वास्तविक सौदा नहीं पा लेता।
मुझे लगता है कि इस तरह के textView से आवश्यकताएँ होनी चाहिए:
किसी भी फ़ॉन्ट, टाइपफेस, शैली और वर्णों के सेट का उपयोग करने की अनुमति देनी चाहिए।
चौड़ाई और ऊंचाई दोनों को संभालना चाहिए
कोई छंटनी नहीं है जब तक कि पाठ सीमा के कारण फिट नहीं हो सकता, हमने इसे दिया है (उदाहरण: बहुत लंबा पाठ, बहुत छोटा उपलब्ध आकार)। हालाँकि, यदि हम चाहें तो क्षैतिज / ऊर्ध्वाधर स्क्रॉलबार के लिए अनुरोध कर सकते हैं, बस उन मामलों के लिए।
मल्टी-लाइन या सिंगल-लाइन की अनुमति देनी चाहिए। बहु-पंक्ति के मामले में, अधिकतम और न्यूनतम रेखाएं अनुमति दें।
गणना में धीमा नहीं होना चाहिए। सबसे अच्छा आकार खोजने के लिए एक लूप का उपयोग करना? कम से कम इसे ऑप्टिमाइज़ करें और हर बार अपने नमूने को 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();
}
}
प्रश्न
क्या किसी को इस सामान्य समस्या के समाधान का पता है जो वास्तव में काम करता है?
यहां तक कि एक समाधान जिसमें बहुत कम विशेषताएं हैं जिनके बारे में मैंने लिखा है, उदाहरण के लिए, जिसमें पाठ की पंक्तियों की एक निरंतर संख्या है, और इसके आकार के अनुसार इसके फ़ॉन्ट को समायोजित करता है, फिर भी कभी भी अजीब गड़बड़ियां नहीं होती हैं और पाठ भी मिलता है इसके उपलब्ध स्थान की तुलना में बड़े / छोटे।
गिटहब परियोजना
के बाद से इस तरह के एक महत्वपूर्ण TextView है, मैं, एक पुस्तकालय प्रकाशित करने के लिए ताकि सभी को आसानी से इसका इस्तेमाल करते हैं, और यह करने के लिए योगदान कर सकता है, तय कर लिया है यहाँ ।