पाठ का आकार और विभिन्न Android स्क्रीन आकार


121

मुझे पता है, यह पहले से ही 1000 बार चर्चा की गई थी, लेकिन मैं अलग-अलग स्क्रीन आकार के लिए पाठ आकार को समायोजित नहीं कर सकता। मैं अपनी कस्टम शैली में 'sp' को आकार इकाइयों के रूप में उपयोग करने का प्रयास करता हूं:

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

2.7 QVGA में यह ठीक लगता है:

2.7QVGA 30sp

लेकिन 7in WSVGA में ऐसा दिखता है:

7in WSVGA 30sp

मैंने एक ही परिणाम के साथ 'sp' और 'dp' दोनों का उपयोग करने की कोशिश की है।

क्या आप बता सकते हैं कि इन बटनों को किसी भी स्क्रीन पर समान कैसे बनाया जा सकता है?

पूर्ण कस्टम बटन शैली

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

और मेरे आवेदन विषय में मेरे पास है

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

और मेरा लेआउट है:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>


आपकी स्क्रीन पर वे समान दिखते हैं। सुनिश्चित करें कि आपका दर्शक पैमाने 100% है
दिमित्री ज़ेत्सेव

आप इसका जवाब यहां से प्राप्त कर सकते हैं stackoverflow.com/questions/16706076/…
भावेश जेठानी

जवाबों:


160

@ मुझे लगता है कि आपको डिज़ाइन के लिए इस Google IO Pdf को जांचना होगा । उस पीडीएफ में पेज नंबर: 77 पर जाएं, जिसमें आप पाएंगे कि कैसे डिमेंस.एक्सएमएल का उपयोग करने का सुझाव दिया गया है, उदाहरण के लिए एंड्रॉइड के विभिन्न उपकरणों के लिए नीचे दी गई संरचना देखें:

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

उदाहरण के लिए आपने मूल्यों में डिमेंस.एक्सएमएल से नीचे का उपयोग किया है।

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

अन्य मान फ़ोल्डर में आपको अपने पाठ आकार के लिए मान बदलने की आवश्यकता होती है।

नोट: जैसा कि @espinchi द्वारा संकेत दिया गया है कि छोटे, सामान्य, बड़े और बड़े आकार को निम्न के पक्ष में एंड्रॉइड 3.2 के बाद से हटा दिया गया है:

एंड्रॉयड 3.2 के लिए टैबलेट लेआउट की घोषणा

एंड्रॉइड 3.0 चलाने वाली गोलियों की पहली पीढ़ी के लिए, टैबलेट लेआउट को घोषित करने का उचित तरीका था कि उन्हें एक निर्देशिका में एक्सलर्ज कॉन्फ़िगरेशन क्वालिफायर (उदाहरण के लिए, रेस / लेआउट-एक्सलर्ज /) के साथ रखा जाए। अन्य प्रकार की टैबलेट और स्क्रीन आकार को समायोजित करने के लिए - विशेष रूप से, 7 "टैबलेट - एंड्रॉइड 3.2 अधिक असतत स्क्रीन आकारों के लिए संसाधनों को निर्दिष्ट करने के लिए एक नया तरीका पेश करता है। नई तकनीक आपके लेआउट की ज़रूरतों के अनुसार अंतरिक्ष की मात्रा पर आधारित है (जैसे) चौड़ाई का 600dp), अपने लेआउट को सामान्यीकृत आकार समूहों (जैसे कि बड़े या बड़े आकार) में फिट करने की कोशिश करने के बजाय।

7 "टैबलेट के लिए डिज़ाइन करने का कारण सामान्य आकार के समूहों का उपयोग करते समय मुश्किल है कि एक 7" टैबलेट तकनीकी रूप से एक ही समूह में 5 "हैंडसेट (बड़े समूह) के रूप में है। जबकि ये दोनों डिवाइस आकार में एक दूसरे के करीब लग रहे हैं। किसी एप्लिकेशन के UI के लिए स्थान की मात्रा काफी भिन्न है, जैसा कि उपयोगकर्ता इंटरैक्शन की शैली है। इस प्रकार, एक 7 "और 5" स्क्रीन को हमेशा एक ही लेआउट का उपयोग नहीं करना चाहिए। आपके लिए इन के लिए अलग-अलग लेआउट प्रदान करना संभव है। दो प्रकार की स्क्रीन, एंड्रॉइड अब आपको अपने लेआउट संसाधनों को उस चौड़ाई और / या ऊंचाई के आधार पर निर्दिष्ट करने की अनुमति देता है जो वास्तव में आपके एप्लिकेशन के लेआउट के लिए उपलब्ध है, डीपी इकाइयों में निर्दिष्ट है।

उदाहरण के लिए, आपके द्वारा टेबलेट-शैली के उपकरणों के लिए उपयोग किए जाने वाले लेआउट को डिज़ाइन करने के बाद, आप यह निर्धारित कर सकते हैं कि स्क्रीन 600dp से कम चौड़ी होने पर लेआउट अच्छी तरह से काम करना बंद कर देता है। यह सीमा इस प्रकार न्यूनतम आकार बन जाती है जिसकी आपको अपने टेबलेट लेआउट के लिए आवश्यकता होती है। जैसे, आप अब निर्दिष्ट कर सकते हैं कि इन लेआउट संसाधनों का उपयोग केवल तब किया जाना चाहिए जब आपके एप्लिकेशन के UI के लिए कम से कम 600dp चौड़ाई उपलब्ध हो।

आपको अपने न्यूनतम आकार के रूप में या तो एक चौड़ाई और डिजाइन चुनना चाहिए, या परीक्षण करना चाहिए कि आपके लेआउट का पूरा होने के बाद सबसे छोटा चौड़ाई क्या है।

नोट: याद रखें कि इन नए आकार एपीआई के साथ उपयोग किए जाने वाले सभी आंकड़े घनत्व-स्वतंत्र पिक्सेल (डीपी) मान हैं और आपके लेआउट आयामों को हमेशा डीपी इकाइयों का उपयोग करके परिभाषित किया जाना चाहिए, क्योंकि आप जो परवाह करते हैं, वह सिस्टम के बाद उपलब्ध स्क्रीन स्पेस की मात्रा है। स्क्रीन घनत्व के लिए खाते (कच्चे पिक्सेल रिज़ॉल्यूशन का उपयोग करने के विपरीत)। घनत्व-स्वतंत्र पिक्सेल के बारे में अधिक जानकारी के लिए, पहले इस दस्तावेज़ में नियम और अवधारणाएँ पढ़ें। नए आकार के क्वालीफायर का उपयोग करना

आपके लेआउट के लिए उपलब्ध स्थान के आधार पर आपके द्वारा निर्दिष्ट विभिन्न संसाधन कॉन्फ़िगरेशन तालिका 2 में संक्षेपित किए गए हैं। ये नए क्वालिफ़ायर आपको पारंपरिक स्क्रीन आकार समूहों (छोटे, सामान्य,) की तुलना में आपके द्वारा समर्थित विशिष्ट स्क्रीन आकारों पर अधिक नियंत्रण प्रदान करते हैं। बड़े, और xlarge)।

नोट: इन क्वालीफायर का उपयोग करके आपके द्वारा निर्दिष्ट आकार वास्तविक स्क्रीन आकार नहीं हैं। बल्कि, आकार dp इकाइयों में चौड़ाई या ऊंचाई के लिए हैं जो आपकी गतिविधि की खिड़की के लिए उपलब्ध हैं। एंड्रॉइड सिस्टम सिस्टम UI के लिए कुछ स्क्रीन का उपयोग कर सकता है (जैसे कि स्क्रीन के निचले भाग में सिस्टम बार या शीर्ष पर स्थिति पट्टी), इसलिए स्क्रीन के कुछ आपके लेआउट के लिए उपलब्ध नहीं हो सकते हैं। इस प्रकार, आपके द्वारा घोषित आकार विशेष रूप से आपकी गतिविधि के लिए आवश्यक आकारों के बारे में होना चाहिए - सिस्टम UI द्वारा उपयोग किए जाने वाले किसी भी स्थान के लिए सिस्टम खातों की घोषणा करते समय कि यह आपके लेआउट के लिए कितना स्थान प्रदान करता है। यह भी सावधान रहें कि एक्शन बार को आपके एप्लिकेशन के विंडो स्पेस का एक हिस्सा माना जाता है, हालांकि आपका लेआउट इसे घोषित नहीं करता है, इसलिए यह आपके लेआउट के लिए उपलब्ध स्थान को कम कर देता है और आपको अपने डिजाइन में इसका हिसाब देना होगा।

तालिका 2. स्क्रीन आकार के लिए नया कॉन्फ़िगरेशन क्वालिफायर (एंड्रॉइड 3.2 में पेश किया गया)। स्क्रीन कॉन्फ़िगरेशन क्वालिफायर मान का विवरण सबसे छोटा WIDD swdp है

उदाहरण: sw600dp sw720dp

स्क्रीन का मूलभूत आकार, जैसा कि उपलब्ध स्क्रीन क्षेत्र के सबसे छोटे आयाम द्वारा इंगित किया गया है। विशेष रूप से, डिवाइस की सबसे छोटी स्क्रीन स्क्रीन की उपलब्ध ऊंचाई और चौड़ाई में सबसे छोटी है (आप इसे स्क्रीन के लिए "सबसे छोटी संभव चौड़ाई" के रूप में भी सोच सकते हैं)। आप इस क्वालिफायर का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि स्क्रीन की वर्तमान अभिविन्यास की परवाह किए बिना, आपके आवेदन की चौड़ाई कम से कम dps है जो इसके UI के लिए उपलब्ध है।

उदाहरण के लिए, यदि आपके लेआउट के लिए आवश्यक है कि स्क्रीन क्षेत्र का उसका सबसे छोटा आयाम हर समय कम से कम 600 dp हो, तो आप लेआउट संसाधन, रेस / लेआउट-स्व 600dp / बनाने के लिए इस क्वालिफायर का उपयोग कर सकते हैं। सिस्टम इन संसाधनों का उपयोग केवल तब करेगा जब उपलब्ध स्क्रीन का सबसे छोटा आयाम कम से कम 600dp हो, चाहे 600dp पक्ष उपयोगकर्ता-कथित ऊंचाई या चौड़ाई हो। छोटी से छोटी डिवाइस की एक निश्चित स्क्रीन आकार विशेषता है; स्क्रीन के ओरिएंटेशन में बदलाव होने पर डिवाइस का सबसे छोटा वर्जन नहीं बदलता है।

डिवाइस की सबसे छोटी चौड़ाई स्क्रीन की सजावट और सिस्टम UI को ध्यान में रखती है। उदाहरण के लिए, यदि डिवाइस में स्क्रीन पर कुछ लगातार यूआई तत्व होते हैं जो अंतरिक्ष में छोटे से धुरी के साथ खाते हैं, तो सिस्टम वास्तविक स्क्रीन आकार की तुलना में सबसे छोटा होने की घोषणा करता है, क्योंकि वे स्क्रीन पिक्सेल आपके यूआई के लिए उपलब्ध नहीं हैं।

यह सामान्यीकृत स्क्रीन आकार क्वालिफायर (छोटा, सामान्य, बड़ा, बड़ा) का एक विकल्प है जो आपको अपने यूआई के लिए उपलब्ध प्रभावी आकार के लिए असतत संख्या को परिभाषित करने की अनुमति देता है। सामान्य स्क्रीन के आकार को निर्धारित करने के लिए छोटी से छोटी चौड़ाई का उपयोग करना उपयोगी है क्योंकि चौड़ाई अक्सर लेआउट को डिजाइन करने में ड्राइविंग कारक होती है। एक यूआई अक्सर लंबवत स्क्रॉल करेगा, लेकिन क्षैतिज रूप से आवश्यक न्यूनतम स्थान पर काफी कठोर बाधाएं हैं। उपलब्ध चौड़ाई यह भी निर्धारित करने में महत्वपूर्ण कारक है कि टैबलेट के लिए हैंडसेट या मल्टी-पैन लेआउट के लिए एक-फलक लेआउट का उपयोग करना है या नहीं। इस प्रकार, आपको सबसे अधिक संभावना है कि प्रत्येक डिवाइस पर सबसे छोटी संभव चौड़ाई क्या होगी। उपलब्ध स्क्रीन चौड़ाई wdp

उदाहरण: w720dp w1024dp

Dp इकाइयों में न्यूनतम उपलब्ध चौड़ाई निर्दिष्ट करता है, जिस पर संसाधनों का उपयोग किया जाना चाहिए-मूल्य द्वारा परिभाषित। चौड़ाई के लिए सिस्टम का संबंधित मूल्य तब बदलता है जब स्क्रीन का ओरिएंटेशन आपके UI के लिए उपलब्ध वर्तमान वास्तविक चौड़ाई को प्रतिबिंबित करने के लिए लैंडस्केप और पोर्ट्रेट के बीच स्विच करता है।

यह बहु-फलक लेआउट का उपयोग करने के लिए निर्धारित करने के लिए अक्सर उपयोगी होता है, क्योंकि टैबलेट डिवाइस पर भी, आप अक्सर चित्र अभिविन्यास के लिए एक ही बहु-फलक लेआउट नहीं चाहेंगे जैसा कि आप परिदृश्य के लिए करते हैं। इस प्रकार, आप लेआउट के लिए आवश्यक न्यूनतम चौड़ाई को निर्दिष्ट करने के लिए इसका उपयोग कर सकते हैं, बजाय स्क्रीन आकार और अभिविन्यास क्वालिफायर दोनों का उपयोग करने के। उपलब्ध स्क्रीन ऊंचाई hdp

उदाहरण: h720dp h1024dp आदि।

Dp इकाइयों में न्यूनतम स्क्रीन ऊंचाई निर्दिष्ट करता है, जिस पर संसाधनों का उपयोग किया जाना चाहिए - मूल्य द्वारा परिभाषित। ऊंचाई के लिए सिस्टम का संबंधित मूल्य तब बदलता है जब स्क्रीन का ओरिएंटेशन आपके UI के लिए उपलब्ध वर्तमान वास्तविक ऊंचाई को प्रतिबिंबित करने के लिए परिदृश्य और चित्र के बीच स्विच करता है।

अपने लेआउट द्वारा आवश्यक ऊँचाई को परिभाषित करने के लिए इसका उपयोग उसी तरह से उपयोगी है जैसे कि wdp स्क्रीन की आकार और अभिविन्यास क्वालिफायर दोनों का उपयोग करने के बजाय आवश्यक चौड़ाई को परिभाषित करने के लिए है। हालाँकि, अधिकांश ऐप्स को इस क्वालिफायर की आवश्यकता नहीं होगी, यह देखते हुए कि यूआई अक्सर लंबवत स्क्रॉल करते हैं और इस प्रकार अधिक लचीले होते हैं कि कितनी ऊंचाई उपलब्ध है, जबकि चौड़ाई अधिक कठोर है।

स्क्रीन आकार समूहों का उपयोग करने की तुलना में इन क्वालीफायर का उपयोग करना अधिक जटिल लग सकता है, यह आपके यूआई के लिए आवश्यकताओं को निर्धारित करने के बाद वास्तव में सरल होना चाहिए। जब आप अपना यूआई डिज़ाइन करते हैं, तो मुख्य रूप से आप जिस चीज़ की परवाह करते हैं, वह वास्तविक आकार होता है, जिस पर आपका एप्लिकेशन हैंडसेट-स्टाइल यूआई और टैबलेट-स्टाइल यूआई के बीच स्विच करता है, जो कई पैन का उपयोग करता है। इस स्विच का सटीक बिंदु आपके विशेष डिज़ाइन पर निर्भर करेगा - शायद आपको अपने टेबलेट लेआउट के लिए 720dp चौड़ाई चाहिए, शायद 600dp पर्याप्त है, या 480dp, या इन दोनों के बीच कुछ संख्या। तालिका 2 में इन क्वालीफायर का उपयोग करके, आप उस सटीक आकार के नियंत्रण में हैं जिस पर आपका लेआउट बदलता है।

इन आकार कॉन्फ़िगरेशन क्वालिफायर के बारे में अधिक चर्चा के लिए, संसाधन संसाधन प्रदान करना देखें। कॉन्फ़िगरेशन उदाहरण

विभिन्न प्रकार के उपकरणों के लिए अपने कुछ डिज़ाइनों को लक्षित करने में आपकी मदद करने के लिए, यहाँ कुछ विशिष्ट स्क्रीन चौड़ाई के लिए नंबर दिए गए हैं:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

तालिका 2 से आकार क्वालीफायर का उपयोग करते हुए, आपका एप्लिकेशन आपके किसी भी संख्या में चौड़ाई और / या ऊँचाई का उपयोग करके हैंडसेट और टैबलेट के लिए आपके विभिन्न लेआउट संसाधनों के बीच स्विच कर सकता है। उदाहरण के लिए, यदि 600dp आपके टेबलेट लेआउट द्वारा समर्थित सबसे छोटी उपलब्ध चौड़ाई है, तो आप लेआउट के इन दो सेटों को प्रदान कर सकते हैं:

रेस / लेआउट / main_activity.xml # हैंडसेट के लिए रेस / लेआउट- sw600dp / main_activity.xml # गोलियों के लिए

इस स्थिति में, टेबलेट लेआउट को लागू करने के लिए उपलब्ध स्क्रीन स्पेस की सबसे छोटी चौड़ाई 600dp होनी चाहिए।

ऐसे अन्य मामलों के लिए जिनमें आप अपने UI को 7 ”और 10” टैबलेट जैसे आकारों के बीच अंतर करने के लिए अनुकूलित करना चाहते हैं, आप अतिरिक्त छोटी चौड़ाई के लेआउट निर्धारित कर सकते हैं:

रेस / लेआउट / main_activity.xml # हैंडसेट के लिए (600dp उपलब्ध चौड़ाई से कम) रेस / लेआउट-स्व 600dp / main_activity.xml # 7 के लिए (600dp चौड़ी और बड़ी) रेस / लेआउट- sw720dp / main_activity.xml

10 ”गोलियों के लिए (720dp चौड़ा और बड़ा)

ध्यान दें कि उदाहरण के संसाधनों के पिछले दो सेट "सबसे छोटी चौड़ाई" क्वालिफायर, swdp का उपयोग करते हैं, जो डिवाइस के वर्तमान अभिविन्यास की परवाह किए बिना, स्क्रीन के दो पक्षों में से सबसे छोटे को निर्दिष्ट करता है। इस प्रकार, swdp का उपयोग करना स्क्रीन के अभिविन्यास को अनदेखा करके आपके लेआउट के लिए उपलब्ध समग्र स्क्रीन आकार को निर्दिष्ट करने का एक सरल तरीका है।

हालाँकि, कुछ मामलों में, आपके लेआउट के लिए जो महत्वपूर्ण हो सकता है वह वर्तमान में कितनी चौड़ाई या ऊँचाई पर उपलब्ध है। उदाहरण के लिए, यदि आपके पास दो टुकड़ों में दो टुकड़े हैं, जिनके किनारे दो टुकड़े हैं, तो आप इसका उपयोग तब करना चाह सकते हैं जब स्क्रीन कम से कम 600dp चौड़ाई प्रदान करती है, चाहे वह उपकरण लैंडस्केप या पोर्ट्रेट ओरिएंटेशन में हो। इस मामले में, आपके संसाधन इस तरह दिख सकते हैं:

रेस / लेआउट / main_activity.xml # हैंडसेट के लिए (600dp से कम चौड़ाई उपलब्ध) रेस / लेआउट- w600dp / main_activity.xml # मल्टी-फलक (600dp उपलब्ध चौड़ाई या अधिक के साथ कोई भी स्क्रीन)

ध्यान दें कि दूसरा सेट "उपलब्ध चौड़ाई" क्वालीफायर, wdp का उपयोग कर रहा है। इस तरह, एक डिवाइस वास्तव में स्क्रीन के उन्मुखीकरण के आधार पर दोनों लेआउट का उपयोग कर सकता है (यदि उपलब्ध चौड़ाई एक अभिविन्यास में कम से कम 600dp है और अन्य अभिविन्यास में 600dp से कम है)।

यदि उपलब्ध ऊंचाई आपके लिए चिंता का विषय है, तो आप एचडीपी क्वालिफायर का उपयोग करके भी ऐसा कर सकते हैं। या, यहां तक ​​कि अगर आप वास्तव में विशिष्ट होने की जरूरत wdp और hdp क्वालिफायर भी गठबंधन।


7
ये छोटे / सामान्य / बड़े / बड़े होते हैं (फिलहाल 2014)। पसंदीदा तरीका अब "swxxxdp" का उपयोग कर रहा है। डेवलपर
.android.com

1
@espinchi आपका धन्यवाद, आपको इसका उत्तर भी देना चाहिए। वहाँ भी किसी भी डीपी की सिफारिश की है? उदाहरण के लिए मानक हैं: 100sw, 200sw, 400sw, 600sw।
विंस वी।

19

मुझे लगता है कि इस थ्रेड पर उत्तर देने में बहुत देर हो चुकी है। लेकिन मैं अंतर संकल्प उपकरणों पर पाठ के आकार की समस्या को हल करने के लिए अपना विचार या तरीका साझा करना चाहूंगा। कई Android डेवलपर साइटों का सुझाव है कि हमें पाठ आकार के लिए sp यूनिट का उपयोग करना होगा जो अंतर रिज़ॉल्यूशन उपकरणों के लिए पाठ आकार को संभालेंगे। लेकिन मैं हमेशा वांछित परिणाम प्राप्त करने में असमर्थ हूं। इसलिए मुझे एक समाधान मिला है जिसका उपयोग मैं अपनी पिछली 4-5 परियोजनाओं और इसके ठीक काम से कर रहा हूं। मेरे सुझाव के अनुसार, आपको प्रत्येक रिज़ॉल्यूशन डिवाइस के लिए टेक्स्ट का आकार देना होगा, जो थोड़ा कठिन काम है, लेकिन यह आपकी आवश्यकता को पूरा करेगा। प्रत्येक डेवलपर को 4: 6: 8: 12 (h: xh: xxh: xxxh क्रमशः) के अनुपात के बारे में सुनना चाहिए । अब अपने प्रोजेक्ट रेस फ़ोल्डर के अंदर आपको डिमेंस फ़ाइल जैसे 4 फ़ोल्डर बनाना होगा

  1. res / values-hdpi / dimens.xml
  2. res / values-xhdpi / dimens.xml
  3. res / values-xxhdpi / dimens.xml
  4. res / values-xxxhdpi / dimens.xml

अब dimens.xml फ़ाइल के अंदर आपको टेक्स्ट साइज़ रखना है। मैं आपको मानों-एचडीपीआई के लिए कोड दिखा रहा हूं , इसी तरह आपको अन्य रिज़ॉल्यूशन वैल्यू / डिमेंस.एक्सएमएल फाइल के लिए कोड रखना होगा।

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

अन्य प्रस्तावों के लिए यह xhdpi की तरह है : 6px, xxhdpi : 8px, xxxhdpi : 12px। यह अनुपात के साथ गणना की जाती है (3: 4: 6: 8: 12) मैंने ऊपर लिखा है। उपरोक्त अनुपात के साथ पाठ के अन्य उदाहरणों पर चर्चा करते हैं। यदि आप एचडीपीआई में 12px का पाठ आकार लेना चाहते हैं, तो अन्य रिज़ॉल्यूशन में यह होगा

  1. एचडीपीआई: १२ पीएक्स
  2. xhdpi: 18px
  3. xxhdpi: जीपीएक्स
  4. xxxhdpi: 36px

यह सभी प्रस्तावों के लिए आवश्यक पाठ आकार को लागू करने का सरल उपाय है। मैं यहां मूल्यों-एमडीपी संकल्प उपकरणों पर विचार नहीं कर रहा हूं । यदि कोई इस संकल्प के लिए पाठ का आकार शामिल करना चाहता है तो राशन 3: 4: 6: 8: 12 की तरह है । किसी भी प्रश्न में कृपया मुझे बताएं। आशा है कि यह आप लोगों की मदद करेगा।


4
पाठ आकार में sp के बजाय px का उपयोग करने के लिए बुरा अभ्यास नहीं है? क्या पीएक्स के बजाय एसपी का उपयोग करके निम्नलिखित अनुपात को प्राप्त करने का एक तरीका है?
Red M

मैंने जाँच की कि यह ठीक काम कर रहा है, लेकिन मैं अभी भी उलझन में हूँ कि क्या dp / sp के बजाय px में मानों का उपयोग करना एक अच्छा अभ्यास है? मैंने पीएक्स में मूल्यों का उपयोग करने के लिए आधिकारिक दस्तावेज से कहीं नहीं देखा है।
shaby

1
फ़ॉन्ट आकार के लिए सपा का उपयोग करें, यह कानून है। दृष्टिकोण जो राहुल ने दिखाया वह सही है, बस पीएक्स के बजाय सपा का उपयोग करें।
मिहिर पटेल

अगर ऐप फॉन्ट साइज को सिस्टम फॉन्ट साइज से जोड़ने की योजना बना रहा है तो sp का इस्तेमाल किया जाना चाहिए। अन्यथा यह समाधान बुरा नहीं है।
इरफान उल हक

12

कभी-कभी, केवल तीन विकल्प रखना बेहतर होता है

 style="@android:style/TextAppearance.Small"

सामान्य स्क्रीन आकार से अंतर करने के लिए छोटे और बड़े का उपयोग करें।

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

सामान्य तौर पर, आपको कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है।

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

इसका उपयोग करके, आप विभिन्न स्क्रीन आकारों के लिए परीक्षण और निर्दिष्ट आयामों से बच सकते हैं।


10

मैंने आयाम के साथ ऐसा ही कुछ किया और जैसे कि (dp के साथ लेकिन केवल पाठ के लिए और drawText में) ()

एक्सएमएल:

   <dimen name="text_size">30sp</dimen>

कोड:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));

8
आपको dpपाठ आकार के लिए उपयोग नहीं करना चाहिए ... spइसके बजाय उपयोग करें ।
योषा अलाय्यूब

कृपया टेक्स्ट साइज़ के लिए sp का उपयोग करें
Thinsky

आप विशिष्ट स्थितियों में dp का उपयोग कर सकते हैं जब आप यह नहीं चाहते कि उपयोगकर्ता वरीयता के आधार पर इसका आकार बदला जा सके।

7

हर कोई नीचे दी गई एंड्रॉइड लाइब्रेरी का उपयोग कर सकता है जो लगभग सभी डिवाइस स्क्रीन के साथ पाठ आकार को संगत करने का सबसे आसान तरीका है। यह वास्तव में स्क्रीन आकार के लिए नए एंड्रॉइड कॉन्फ़िगरेशन क्वालिफायर (एंड्रॉइड 3.2 में पेश किया गया) के आधार पर विकसित किया गया था।

https://github.com/intuit/sdp


2
एसडीपी स्क्रीन आकार के लिए है; उपयोग एसएसपी पाठ का आकार के लिए
ecle

यह मेरे लिए काम करता है, लेकिन मुझे संदेह है कि जोड़ने के लिए बहुत अधिक फाइलें हैं, इससे ऐप का आकार बढ़ेगा,
@ मुहम्मद

1

अगर आपके पास एपीआई 26 है तो आप ऑटोसाइज़टेक्स्ट टाइप का उपयोग करने पर विचार कर सकते हैं :

<Button
  app:autoSizeTextType="uniform" />

डिफ़ॉल्ट सेटिंग क्षैतिज और ऊर्ध्वाधर अक्षों पर समान रूप से TextView स्केल के ऑटो-आकार की सुविधा देती है।

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview


इसके साथ समस्या यह है कि यह अलग-अलग लंबाई के स्ट्रिंग्स के साथ मल्टीपल टेक्स्ट साक्षात्कार के लिए समान रूप से पाठ का आकार नहीं बदलता है
सौरभ एस नाथ

0

मुझे लगता है कि आप प्रत्येक स्क्रीन आकार के लिए कई लेआउट संसाधन जोड़कर संग्रह कर सकते हैं, उदाहरण:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

संदर्भ: १. http://developer.android.com/guide/practices/screens_support.html


2
रेस / मान का उपयोग करें-छोटा बेहतर हो सकता है।
einverne

1
सबसे खराब कार्यान्वयन में से एक। हमें विभिन्न आकारों का समर्थन करने के लिए केवल 5 लेआउट बनाए रखने होंगे?
सॉलिडस्नेक

वेरिएंट स्क्रीन में सिर्फ टेक्स्ट साइज को कम करने के लिए अलग-अलग लेआउट बनाना वास्तव में बुरा विचार है। मेरा सुझाव है कि
समन सालेहि

0

फ़ॉन्ट आकार सहित समान तत्व आकार दिखाने के लिए सभी स्क्रीन को एकजुट करने के लिए: - डिज़ाइन के दौरान जो भी आकार आपको उपयुक्त लगे, उसके साथ एक स्क्रीन आकार पर UI डिज़ाइन करें अर्थात टेक्स्ट व्यू फ़ॉन्ट आकार 14'p 4'6 इंच के साथ डिफ़ॉल्ट स्क्रीन आकार पर है।

  • प्रोग्रामेटिक रूप से अन्य फोन / स्क्रीन के 5'2 इंच अन्य फोन के भौतिक स्क्रीन आकार की गणना करें।

  • 2 स्क्रीन के बीच प्रतिशत अंतर की गणना करने के लिए एक सूत्र का उपयोग करें। यानी 4'6 और 5'2 के बीच% अंतर क्या है।

  • उपरोक्त सूत्र के आधार पर 2 TextViews के बीच पिक्सेल अंतर की गणना करें।

  • TextView फ़ॉन्ट-आकार का वास्तविक आकार (पिक्सेल में) प्राप्त करें और डिफ़ॉल्ट फ़ॉन्ट-आकार में पिक्सेल अंतर (आप पहले की गणना) लागू करें।

इस तरह से आप सभी स्क्रीन आकारों के लिए गतिशील पहलू अनुपात लागू कर सकते हैं और परिणाम बहुत अच्छा है। आपके पास प्रत्येक स्क्रीन पर समान लेआउट और आकार होंगे।

यह पहली बार में थोड़ा मुश्किल हो सकता है, लेकिन एक बार फॉर्मूला निकालने के बाद लक्ष्य को पूरी तरह हासिल कर लेता है। इस पद्धति के साथ आपको अलग-अलग स्क्रीन आकार में फिट होने के लिए कई लेआउट बनाने की आवश्यकता नहीं है।


0

आप अपनी अलग स्क्रीन को समायोजित करने के लिए उपयोग weightSumऔर layout_weightसंपत्ति भी कर सकते हैं।

उसके लिए, आपको android:layout_width= 0dp, और android:layout_width= (जो भी आप चाहते हैं) बनाना है;



-2

आकारों को हार्डकोड न करें।

लचीलेपन के विज्ञापन के नए स्क्रीन रिज़ॉल्यूशन के लिए - डमी टेक्स्टव्यू को लेआउट में जगह देना सबसे अच्छा अभ्यास है।

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

और उदाहरण के लिए आपके कोड में:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

textSizeएक संदर्भ के रूप में रखें जिसमें आप निरंतर या परकोटे आकार (गणना करके) जोड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.