Android
साधन
खोज…
एक स्ट्रिंग का अनुवाद करें
आपके द्वारा समर्थित प्रत्येक भाषा के लिए एक अलग स्ट्रिंग्स.xml को परिभाषित करके स्ट्रिंग्स का अंतर्राष्ट्रीयकरण किया जा सकता है।
आप प्रत्यय के रूप में ISO भाषा कोड के साथ एक नई मान निर्देशिका बनाकर एक नई भाषा जोड़ते हैं। उदाहरण के लिए, एक जर्मन सेट जोड़ते समय आपकी संरचना इस प्रकार दिख सकती है:
जब सिस्टम अनुरोधित स्ट्रिंग की तलाश करता है, तो वह पहले भाषा-विशिष्ट xml की जांच करता है, यदि यह नहीं पाया जाता है, तो डिफ़ॉल्ट स्ट्रिंग्स.xml फ़ाइल से मान वापस आ जाता है। कुंजी प्रत्येक भाषा के लिए समान रहती है और केवल मान बदल जाता है।
उदाहरण सामग्री:
/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloWorld</string>
<string name="hello_world">Hello World!</string>
</resources>
/res/values-fr/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_world">Bonjour tout le monde !!!</string>
</resources>
तार परिभाषित करें
स्ट्रिंग्स आमतौर पर संसाधन फ़ाइल strings.xml
में संग्रहीत की जाती हैं। वे <string>
XML तत्व का उपयोग करके परिभाषित किए गए हैं।
स्ट्रिंग्स.एक्सएमएल का उद्देश्य अंतर्राष्ट्रीयकरण की अनुमति देना है। आप प्रत्येक भाषा iso कोड के लिए एक स्ट्रिंग्स.xml परिभाषित कर सकते हैं। इस प्रकार जब सिस्टम स्ट्रिंग 'app_name' की तलाश करता है, तो यह पहले xml फ़ाइल को वर्तमान भाषा के अनुरूप जाँचता है, और यदि यह नहीं पाया जाता है, तो डिफ़ॉल्ट strings.xml फ़ाइल में प्रविष्टि की तलाश करता है। इसका मतलब है कि आप अपने कुछ तार केवल स्थानीय बनाना चुन सकते हैं जबकि अन्य नहीं।
/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Hello World App</string>
<string name="hello_world">Hello World!</string>
</resources>
XML संसाधन फ़ाइल में स्ट्रिंग को परिभाषित करने के बाद, इसे ऐप के अन्य भागों द्वारा उपयोग किया जा सकता है।
एक ऐप की XML प्रोजेक्ट फाइल्स @string/string_name
हवाला देकर <string>
एलिमेंट का उपयोग कर सकती हैं। उदाहरण के लिए, एक ऐप के प्रकटन (/manifests/AndroidManifest.xml) फ़ाइल में Android स्टूडियो में डिफ़ॉल्ट रूप से निम्न पंक्ति शामिल है:
android:label="@string/app_name"
यह एंड्रॉइड को एक <string>
रिसोर्स देखने के लिए कहता है जिसे "app_name" कहा जाता है, इसे ऐप के नाम के रूप में उपयोग करने के लिए जब इसे इंस्टॉल किया जाता है या लॉन्चर में प्रदर्शित किया जाता है।
दूसरी बार जब आप Android में XML फ़ाइल से <string>
संसाधन का उपयोग करेंगे तो एक लेआउट फ़ाइल में होगा। उदाहरण के लिए, निम्नलिखित एक TextView का प्रतिनिधित्व करता है, जो हमारे द्वारा पहले परिभाषित किए गए hello_world
स्ट्रिंग को प्रदर्शित करता है:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"/>
आप अपने ऐप के जावा भाग से <string>
संसाधनों का उपयोग कर सकते हैं। एक गतिविधि वर्ग के भीतर ऊपर से हमारे उसी hello_world
स्ट्रिंग को याद करने के लिए, उपयोग करें:
String helloWorld = getString(R.string.hello_world);
स्ट्रिंग सरणी को परिभाषित करें
एक स्ट्रिंग सरणी को परिभाषित करने के लिए संसाधन फ़ाइल में लिखें
res / values / filename.xml
<string-array name="string_array_name">
<item>text_string</item>
<item>@string/string_id</item>
</string-array>
उदाहरण के लिए
res / values / arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="string_array_example">
<item>@string/app_name</item>
<item>@string/hello_world</item>
</string-array>
</resources>
और जैसे जावा से उपयोग करें
String[] strings = getResources().getStringArray(R.array.string_array_example;
Log.i("TAG",Arrays.toString(strings)));
उत्पादन
I/TAG: [HelloWorld, Hello World!]
आयामों को परिभाषित करें
आयाम आमतौर पर एक संसाधन फ़ाइल नाम dimens.xml
में संग्रहीत होते हैं। उन्हें एक <dimen>
तत्व का उपयोग करके परिभाषित किया गया है।
res / values / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="small_padding">5dp</dimen>
<dimen name="medium_padding">10dp</dimen>
<dimen name="large_padding">20dp</dimen>
<dimen name="small_font">14sp</dimen>
<dimen name="medium_font">16sp</dimen>
<dimen name="large_font">20sp</dimen>
</resources>
आप विभिन्न इकाइयों का उपयोग कर सकते हैं:
- सपा: स्केल-स्वतंत्र पिक्सेल। फोंट के लिए।
- डीपी: घनत्व-स्वतंत्र पिक्सेल। बाकी सब के लिए।
- पीटी: अंक
- px: पिक्सेल
- मिमी: मिलीमीटर
- im: इंच
XML को अब सिंटैक्स @dimen/name_of_the_dimension
साथ XML में संदर्भित किया जा सकता है।
उदाहरण के लिए:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/large_padding">
</RelativeLayout>
पूर्णांक परिभाषित करें
पूर्णांक आमतौर पर पूर्णांक.xml नामक संसाधन फ़ाइल में संग्रहीत होते integers.xml
, लेकिन फ़ाइल नाम को मनमाने ढंग से चुना जा सकता है। प्रत्येक पूर्णांक को <integer>
तत्व का उपयोग करके परिभाषित किया गया है, जैसा कि निम्नलिखित फ़ाइल में दिखाया गया है:
res / values / integers.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="max">100</integer>
</resources>
XML को अब सिंटैक्स @integer/name_of_the_integer
साथ XML में संदर्भित किया जा सकता है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
<ProgressBar
android:layout_width="match_parent"
android:layout_height="match_parent"
android:max="@integer/max"/>
पूर्णांक सरणी को परिभाषित करें
किसी पूर्णांक सरणी को परिभाषित करने के लिए संसाधन फ़ाइल में लिखें
res / values / filename.xml
<integer-array name="integer_array_name">
<item>integer_value</item>
<item>@integer/integer_id</item>
</integer-array>
उदाहरण के लिए
res / values / arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer-array name="fibo">
<item>@integer/zero</item>
<item>@integer/one</item>
<item>@integer/one</item>
<item>@integer/two</item>
<item>@integer/three</item>
<item>@integer/five</item>
</integer-array>
</resources>
और जैसे जावा से उपयोग करें
int[] values = getResources().getIntArray(R.array.fibo);
Log.i("TAG",Arrays.toString(values)));
उत्पादन
I/TAG: [0, 1, 1, 2, 3, 5]
रंगों को परिभाषित करें
रंग आमतौर पर /res/values/
फ़ोल्डर में colors.xml
नामक एक संसाधन फ़ाइल में संग्रहीत होते हैं।
उन्हें <color>
तत्वों द्वारा परिभाषित किया गया है:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="blackOverlay">#66000000</color>
</resources>
रंगों को प्रत्येक रंग चैनल के लिए हेक्साडेसिमल रंग मानों द्वारा दर्शाया जाता है (0 - FF)
एक प्रारूप में:
-
#RGB
-
#ARGB
-
#RRGGBB
-
#AARRGGBB
किंवदंती
- ए - अल्फा चैनल - 0 मान पूरी तरह से पारदर्शी है, एफएफ मूल्य अपारदर्शी है
- आर - लाल चैनल
- जी - ग्रीन चैनल
- बी - ब्लू चैनल
XML में परिभाषित रंगों का उपयोग सिंटैक्स @color/name_of_the_color
साथ किया जा सकता है
उदाहरण के लिए:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackOverlay">
कोड में रंगों का उपयोग करना
ये उदाहरण मानते हैं कि this
एक गतिविधि संदर्भ है। एक संदर्भ संदर्भ का उपयोग इसके स्थान पर भी किया जा सकता है।
int color = ContextCompat.getColor(this, R.color.black_overlay);
view.setBackgroundColor(color);
int color = this.getResources().getColor(this, R.color.black_overlay);
view.setBackgroundColor(color);
उपरोक्त घोषणा के colorPrimary
, colorPrimaryDark
और colorAccent
का उपयोग सामग्री डिज़ाइन रंगों को परिभाषित करने के लिए किया जाता है, जो कि styles.xml
में styles.xml
में कस्टम एंड्रॉइड थीम को परिभाषित करने में उपयोग किया जाएगा। जब एंड्रॉइड स्टूडियो के साथ नया प्रोजेक्ट बनाया जाता है तो वे स्वचालित रूप से जुड़ जाते हैं।
"पदावनत" चेतावनियों के बिना संसाधन प्राप्त करना
एंड्रॉइड एपीआई 23 या उच्चतर का उपयोग करना, बहुत बार ऐसी स्थिति देखी जा सकती है:
यह स्थिति संसाधनों को प्राप्त करने के संबंध में एंड्रॉइड एपीआई के संरचनात्मक परिवर्तन के कारण होती है।
अब समारोह:
public int getColor(@ColorRes int id, @Nullable Theme theme) throws NotFoundException
इस्तेमाल किया जाना चाहिए। लेकिन android.support.v4
लाइब्रेरी का एक और उपाय है।
निम्न निर्भरता build.gradle
फ़ाइल में जोड़ें:
com.android.support:support-v4:24.0.0
फिर समर्थन पुस्तकालय से सभी विधियाँ उपलब्ध हैं:
ContextCompat.getColor(context, R.color.colorPrimaryDark);
ContextCompat.getDrawable(context, R.drawable.btn_check);
ContextCompat.getColorStateList(context, R.color.colorPrimary);
DrawableCompat.setTint(drawable);
ContextCompat.getColor(context,R.color.colorPrimaryDark));
इसके अलावा समर्थन पुस्तकालय से अधिक तरीकों का इस्तेमाल किया जा सकता है:
ViewCompat.setElevation(textView, 1F);
ViewCompat.animate(textView);
TextViewCompat.setTextAppearance(textView, R.style.AppThemeTextStyle);
...
एक मेनू संसाधन को परिभाषित करें और इसका उपयोग गतिविधि / फ़्रैगमेंट के अंदर करें
Res / मेनू में एक मेनू को परिभाषित करें
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/first_item_id"
android:orderInCategory="100"
android:title="@string/first_item_string"
android:icon="@drawable/first_item_icon"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/second_item_id"
android:orderInCategory="110"
android:title="@string/second_item_string"
android:icon="@drawable/second_item_icon"
app:showAsAction="ifRoom"/>
</menu>
कॉन्फ़िगरेशन के अधिक विकल्पों के लिए देखें: मेनू संसाधन
अंदर की Activity
:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
///Override defining menu resource
inflater.inflate(R.menu.menu_resource_id, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
//Override for preparing items (setting visibility, change text, change icon...)
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Override it for handling items
int menuItemId = item.getItemId();
switch (menuItemId) {
case: R.id.first_item_id
return true; //return true, if is handled
}
return super.onOptionsItemSelected(item);
}
दृश्य दिखाने के दौरान ऊपर दिए गए तरीकों को लागू करने के लिए, getActivity().invalidateOptionsMenu();
कॉल करें getActivity().invalidateOptionsMenu();
अंदर Fragment
एक अतिरिक्त कॉल की जरूरत है:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onCreateView(inflater, container, savedInstanceState);
}
स्ट्रिंग स्ट्रिंग्स में स्वरूपण। xml
स्ट्रिंग्स में स्ट्रिंग्स को परिभाषित करना। xml फ़ाइल स्ट्रिंग स्ट्रिंगिंग के लिए भी अनुमति देता है। केवल चेतावनी यह है कि स्ट्रिंग को नीचे दिए गए कोड की तरह निपटाया जाना चाहिए, या इसे केवल एक लेआउट में संलग्न करना होगा।
<string name="welcome_trainer">Hello Pokémon Trainer, %1$s! You have caught %2$d Pokémon.</string>
String welcomePokemonTrainerText = getString(R.string.welcome_trainer, tranerName, pokemonCount);
उपरोक्त उदाहरण में,
% 1 $ s
'%' सामान्य पात्रों से अलग करता है,
'1' पहले पैरामीटर को दर्शाता है,
'$' का उपयोग पैरामीटर संख्या और प्रकार के बीच विभाजक के रूप में किया जाता है,
's' स्ट्रिंग प्रकार को दर्शाता है ('d' का उपयोग पूर्णांक के लिए किया जाता है)
ध्यान दें कि getString()
Context
या Resources
की एक विधि है, अर्थात आप इसे सीधे किसी Activity
उदाहरण में उपयोग कर सकते हैं, या फिर आप getActivity().getString()
या getContext().getString()
getActivity().getString()
उपयोग कर सकते हैं।
एक रंग राज्य सूची को परिभाषित करें
रंग राज्य सूचियों को रंगों के रूप में उपयोग किया जा सकता है, लेकिन वे जिस स्थिति के लिए उपयोग किए जाते हैं, उस स्थिति के आधार पर बदल जाएंगे।
एक को परिभाषित करने के लिए, res/color/foo.xml
में एक संसाधन फ़ाइल res/color/foo.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#888888" android:state_enabled="false"/>
<item android:color="@color/lightGray" android:state_selected="false"/>
<item android:color="@android:color/white" />
</selector>
आइटम का मूल्यांकन उस क्रम में किया जाता है जिसे वे परिभाषित करते हैं, और पहला आइटम जिसका निर्दिष्ट राज्य दृश्य की वर्तमान स्थिति से मेल खाता है, का उपयोग किया जाता है। इसलिए किसी भी राज्य के चयनकर्ताओं को निर्दिष्ट किए बिना, अंत में कैच-ऑल निर्दिष्ट करना एक अच्छा अभ्यास है।
प्रत्येक आइटम या तो एक रंग शाब्दिक का उपयोग कर सकता है, या कहीं और परिभाषित रंग का संदर्भ दे सकता है।
स्ट्रिंग प्लेसल्स को परिभाषित करें
बहुवचन और एकवचन स्ट्रिंग्स के बीच अंतर करने के लिए, आप अपनी स्ट्रिंग्स में एक बहुवचन को परिभाषित कर सकते हैं। xml फ़ाइल और विभिन्न मात्राओं को सूचीबद्ध कर सकते हैं, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="hello_people">
<item quantity="one">Hello to %d person</item>
<item quantity="other">Hello to %d people</item>
</plurals>
</resources>
Resources
श्रेणी के getQuantityString()
विधि का उपयोग करके इस परिभाषा को जावा कोड से एक्सेस किया जा सकता है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
getResources().getQuantityString(R.plurals.hello_people, 3, 3);
यहाँ, पहला पैरामीटर R.plurals.hello_people
संसाधन नाम है। दूसरा पैरामीटर (इस उदाहरण में 3
) का उपयोग सही quantity
स्ट्रिंग लेने के लिए किया जाता है। तीसरा पैरामीटर (इस उदाहरण में भी 3
) प्रारूप तर्क है जो प्रारूप निर्दिष्ट %d
को प्रतिस्थापित करने के लिए उपयोग किया जाएगा।
संभावित मात्रा मान (वर्णमाला क्रम में सूचीबद्ध) हैं:
few
many
one
other
two
zero
यह ध्यान रखना महत्वपूर्ण है कि सभी स्थान quantity
हर संप्रदाय का समर्थन नहीं करते हैं। उदाहरण के लिए, चीनी भाषा में one
आइटम की अवधारणा नहीं है। अंग्रेजी में एक zero
आइटम नहीं है, क्योंकि यह व्याकरणिक रूप से other
के समान है। quantity
असमर्थित उदाहरणों को आईडीई द्वारा लिंट चेतावनी के रूप में चिह्नित किया जाएगा, लेकिन यदि उनका उपयोग किया जाता है तो जटिलता त्रुटियों का कारण नहीं होगा।
संसाधनों में परिभाषित वस्तुओं का आयात सरणी
ऐसे मामले हैं, जहां कस्टम ऑब्जेक्ट्स को एप्लिकेशन के संसाधनों में बनाने और परिभाषित करने की आवश्यकता होती है। ऐसी वस्तुओं को Java
सरल प्रकारों से बनाया जा सकता है, उदाहरण के लिए Integer
, Float
, String
।
आवेदन संसाधनों में परिभाषित वस्तु को कैसे आयात किया जाए, इसका उदाहरण यहां दिया गया है। वस्तु Category
3 गुण हैं:
- आईडी
- रंग
- नाम
इस POJO
में यह categories.xml
POJO
फ़ाइल के बराबर है, जहाँ प्रत्येक सरणी में प्रत्येक श्रेणी के लिए समान गुण हैं।
- आप के लिए एक मॉडल बनाएँ वस्तु:
public class Category {
private Type id;
private @ColorRes int color;
private @StringRes String name;
public Category getId() {
return id;
}
public void setId(Category id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public enum Type{
REGISTRATION,
TO_ACCEPT,
TO_COMPLETE,
TO_VERIFY,
CLOSED
}
}
- फ़ाइल को
res/values
फ़ोल्डर में बनाएँ:
categories.xml
- संसाधनों से युक्त प्रत्येक मॉडल की रचना करें:
<array name="no_action">
<item>0</item>
<item>@android:color/transparent</item>
<item>@string/statusRegistration</item>
</array>
<array name="to_accept">
<item>1</item>
<item>@color/light_gray</item>
<item>@string/acceptance</item>
</array>
<array name="opened">
<item>2</item>
<item>@color/material_green_500</item>
<item>@string/open</item>
</array>
<array name="to_verify">
<item>3</item>
<item>@color/material_gray_800</item>
<item>@string/verification</item>
</array>
<array name="to_close">
<item>4</item>
<item>@android:color/black</item>
<item>@string/closed</item>
</array>
संसाधन फ़ाइल में एक सरणी परिभाषित करें:
<array name="categories"> <item>@array/no_action</item> <item>@array/to_accept</item> <item>@array/opened</item> <item>@array/to_verify</item> <item>@array/to_close</item> </array>
उन्हें आयात करने के लिए एक समारोह बनाएँ:
@NonNull public List<Category> getCategories(@NonNull Context context) { final int DEFAULT_VALUE = 0; final int ID_INDEX = 0; final int COLOR_INDEX = 1; final int LABEL_INDEX = 2; if (context == null) { return Collections.emptyList(); } // Get the array of objects from the `tasks_categories` array TypedArray statuses = context.getResources().obtainTypedArray(R.array.categories); if (statuses == null) { return Collections.emptyList(); } List<Category> categoryList = new ArrayList<>(); for (int i = 0; i < statuses.length(); i++) { int statusId = statuses.getResourceId(i, DEFAULT_VALUE); // Get the properties of one object TypedArray rawStatus = context.getResources().obtainTypedArray(statusId); Category category = new Category(); int id = rawStatus.getInteger(ID_INDEX, DEFAULT_VALUE); Category.Type categoryId; //The ID's should maintain the order with `Category.Type` switch (id) { case 0: categoryId = Category.Type.REGISTRATION; break; case 1: categoryId = Category.Type.TO_ACCEPT; break; case 2: categoryId = Category.Type.TO_COMPLETE; break; case 3: categoryId = Category.Type.TO_VERIFY; break; case 4: categoryId = Category.Type.CLOSED; break; default: categoryId = Category.Type.REGISTRATION; break; } category.setId(categoryId); category.setColor(rawStatus.getResourceId(COLOR_INDEX, DEFAULT_VALUE)); int labelId = rawStatus.getResourceId(LABEL_INDEX, DEFAULT_VALUE); category.setName(getString(context.getResources(), labelId)); categoryList.add(taskCategory); } return taskCategoryList; }
9 पैच
9 पैच स्ट्रेचेबल इमेज हैं, जिसमें स्ट्रेच किए जा सकने वाले क्षेत्रों को पारदर्शी बॉर्डर पर काले मार्करों द्वारा परिभाषित किया गया है।
यहाँ एक बढ़िया ट्यूटोरियल है ।
इतना पुराना होने के बावजूद, यह अभी भी इतना मूल्यवान है और इसने 9 पैच गियर को गहराई से समझने में हममें से कई को मदद की।
दुर्भाग्य से, हाल ही में उस पृष्ठ को थोड़ी देर के लिए रखा गया है (यह वर्तमान में फिर से है)।
इसलिए, हमारे विश्वसनीय सर्वर / एस पर एंड्रॉइड डेवलपर्स के लिए उस पृष्ठ की एक भौतिक प्रतिलिपि की आवश्यकता है।
यही पर है।
एंड्रॉइड यूआई 18 मई, 2011 के लिए 9-पाट के लिए एक सरल गाइड
जब मैं अपने पहले एंड्रॉइड ऐप पर काम कर रहा था, मैंने 9-पैच (उर्फ 9. पीएनजी) को भ्रामक और खराब रूप से प्रलेखित पाया। थोड़ी देर के बाद, मैंने आखिरकार यह उठाया कि यह कैसे काम करता है और दूसरों को यह पता लगाने में मदद करने के लिए कुछ फेंकने का फैसला किया।
मूल रूप से, 9-पैच 9-स्लाइस या स्केल 9 का एक उन्नत रूप करने के लिए png पारदर्शिता का उपयोग करता है। गाइड सीधे हैं, आपकी छवि के किनारे पर खींची गई 1-पिक्सेल काली रेखाएँ जो आपकी छवि के स्केलिंग और भरण को परिभाषित करती हैं। अपनी छवि फ़ाइल नाम.9.png के नामकरण से, एंड्रॉइड 9.png प्रारूप को पहचान लेगा और अपने बिटकैप को भरने और भरने के लिए काले गाइडों का उपयोग करेगा।
यहां एक मूल गाइड मैप दिया गया है:
जैसा कि आप देख सकते हैं, आपके पास आपकी छवि के प्रत्येक पक्ष पर मार्गदर्शक हैं। TOP और LEFT गाइड आपकी छवि (यानी 9-स्लाइस) को स्केल करने के लिए हैं, जबकि RIGHT और BOTTOM गाइड फिल क्षेत्र को परिभाषित करते हैं।
काली गाइड लाइनें आपकी छवि से कट-ऑफ / हटा दी जाती हैं - वे ऐप में नहीं दिखाई देंगी। मार्गदर्शिकाएँ केवल एक पिक्सेल चौड़ी होनी चाहिए, इसलिए यदि आप 48 × 48 बटन चाहते हैं, तो आपका png वास्तव में 50 × 50 होगा। एक पिक्सेल से अधिक मोटी कुछ भी आपकी छवि का हिस्सा रहेगा। (मेरे उदाहरणों में बेहतर दृश्यता के लिए 4-पिक्सेल वाइड गाइड हैं। उन्हें वास्तव में केवल 1-पिक्सेल होना चाहिए)।
आपके मार्गदर्शक ठोस काले (# 000000) होने चाहिए। यहां तक कि रंग (# 000001) या अल्फा में मामूली अंतर भी इसे विफल कर देगा और सामान्य रूप से खिंचाव करेगा। यह विफलता या तो स्पष्ट नहीं होगी *, यह चुपचाप विफल रहता है! हाँ। वास्तव में। अब तुम जानते हो।
इसके अलावा, आपको यह ध्यान रखना चाहिए कि एक-पिक्सेल की रूपरेखा का शेष क्षेत्र पूरी तरह से पारदर्शी होना चाहिए। इसमें छवि के चार कोने शामिल हैं - जिन्हें हमेशा स्पष्ट होना चाहिए। यह आपको महसूस करने की तुलना में एक बड़ी समस्या हो सकती है। उदाहरण के लिए, यदि आप फ़ोटोशॉप में एक छवि को स्केल करते हैं, तो इसमें एंटी-अलियासिड पिक्सेल जोड़े जाएंगे जिसमें लगभग-अदृश्य पिक्सेल शामिल हो सकते हैं, जो इसे विफल करने का कारण भी बनेंगे *। यदि आपको फ़ोटोशॉप में स्केल करना है, तो अपने गाइड पर तेज किनारों को बनाए रखने के लिए रिम्पल इमेज पुलडाउन मेनू (इमेज साइज पॉप-अप मेनू के निचले भाग में) के पास नेबर सेटिंग का उपयोग करें।
* (अद्यतन 1/2012) यह वास्तव में नवीनतम देव किट में एक "फिक्स" है। इससे पहले यह आपके सभी अन्य छवियों और संसाधनों के अचानक प्रकट होने के रूप में प्रकट होगा, न कि वास्तव में 9-पैच छवि को तोड़ने के लिए।
TOP और LEFT मार्गदर्शिकाएँ आपकी छवि के स्केलेबल हिस्से को परिभाषित करने के लिए उपयोग की जाती हैं - स्केलिंग ऊँचाई के लिए LEFT, स्केलिंग चौड़ाई के लिए TOP। एक उदाहरण के रूप में एक बटन छवि का उपयोग करना, इसका मतलब है कि बटन क्षैतिज और लंबवत रूप से काले हिस्से के भीतर फैल सकता है और बाकी सब, जैसे कि कोनों, एक ही आकार रहेगा। आपको ऐसे बटन रखने की अनुमति देता है जो किसी भी आकार को माप सकते हैं और एक समान रूप बनाए रख सकते हैं।
यह ध्यान रखना महत्वपूर्ण है कि 9-पैच चित्र नीचे पैमाने पर नहीं हैं - वे केवल बड़े पैमाने पर हैं। इसलिए जितना संभव हो उतना छोटा शुरू करना सबसे अच्छा है।
इसके अलावा, आप स्केल लाइन के बीच में भाग छोड़ सकते हैं। उदाहरण के लिए, यदि आपके पास बीच में एक तेज चमकदार किनारे वाला बटन है, तो आप LEFT गाइड के बीच में कुछ पिक्सेल छोड़ सकते हैं। आपकी छवि का केंद्र क्षैतिज अक्ष पैमाने पर नहीं होगा, बस इसके ऊपर और नीचे के हिस्से, इसलिए आपके तेज चमक को एंटी-अलियास या फजी नहीं मिलेगा।
फिल एरिया गाइड वैकल्पिक हैं और आपके टेक्स्ट लेबल जैसे सामान के लिए क्षेत्र को परिभाषित करने का एक तरीका प्रदान करते हैं। भरें निर्धारित करता है कि पाठ, या एक आइकन, या अन्य चीजों को रखने के लिए आपकी छवि के भीतर कितना कमरा है। 9-पैच केवल बटनों के लिए नहीं है, यह पृष्ठभूमि छवियों के लिए भी काम करता है।
उपरोक्त बटन और लेबल का उदाहरण केवल भरने के विचार को समझाने के लिए अतिरंजित है - लेबल पूरी तरह से सही नहीं है। ईमानदार होने के लिए, मैंने अनुभव नहीं किया है कि बटन लेबल के बाद से एंड्रॉइड मल्टी-लाइन लेबल कैसे करता है, आमतौर पर टेक्स्ट की एक पंक्ति होती है।
अंत में, यहां एक अच्छा प्रदर्शन है कि कैसे पैमाने और भरण गाइड अलग-अलग हो सकते हैं, जैसे कि एक पृष्ठभूमि छवि और पूरी तरह से गोल पक्षों के साथ एक रेखीयआउटआउट:
इस उदाहरण के साथ, LEFT गाइड का उपयोग नहीं किया जाता है, लेकिन हमें अभी भी एक गाइड की आवश्यकता है। पृष्ठभूमि छवि लंबवत पैमाने पर नहीं है; यह सिर्फ क्षैतिज रूप से (TOP गाइड पर आधारित) है। भरण मार्गदर्शकों को देखते हुए, RIGHT और BOTTOM मार्गदर्शिकाएँ उस सीमा से आगे बढ़ती हैं जहाँ वे छवि के घुमावदार किनारों से मिलती हैं। यह मुझे एक तंग, सज्जित लुक के लिए पृष्ठभूमि के किनारों के करीब मेरे गोल बटन लगाने की अनुमति देता है।
तो यह बात है। 9-पैच सुपर आसान है, एक बार जब आप इसे प्राप्त करते हैं। यह स्केलिंग करने का एक सही तरीका नहीं है, लेकिन फिल-एरिया और मल्टी-लाइन स्केल-गाइड पारंपरिक 9-स्लाइस और स्केल 9 की तुलना में अधिक लचीलापन प्रदान करता है। इसे आज़माएँ और आप इसे जल्दी समझ लेंगे।
रंग पारदर्शिता (अल्फा) स्तर
हेक्स अपारदर्शिता मान
------------------------------
| Alpha(%) | Hex Value |
------------------------------
| 100% | FF |
| 95% | F2 |
| 90% | E6 |
| 85% | D9 |
| 80% | CC |
| 75% | BF |
| 70% | B3 |
| 65% | A6 |
| 60% | 99 |
| 55% | 8C |
| 50% | 80 |
| 45% | 73 |
| 40% | 66 |
| 35% | 59 |
| 30% | 4D |
| 25% | 40 |
| 20% | 33 |
| 15% | 26 |
| 10% | 1A |
| 5% | 0D |
| 0% | 00 |
------------------------------
अगर आप लाल रंग को 45% सेट करना चाहते हैं।
<color name="red_with_alpha_45">#73FF0000</color>
लाल के लिए हेक्स मान - # FF0000
आप उपसर्ग में 45% अस्पष्टता के लिए 73 जोड़ सकते हैं - # 73FF0000
Strings.xml फ़ाइल के साथ कार्य करना
एक स्ट्रिंग संसाधन वैकल्पिक पाठ शैली और स्वरूपण के साथ आपके आवेदन के लिए पाठ तार प्रदान करता है। तीन प्रकार के संसाधन हैं जो आपके आवेदन को तार के साथ प्रदान कर सकते हैं:
तार
XML resource that provides a single string.
वाक्य - विन्यास:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="string_name">text_string</string>
</resources>
और लेआउट में इस स्ट्रिंग का उपयोग करने के लिए:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/string_name" />
स्ट्रिंग ऐरे
XML resource that provides an array of strings.
वाक्य - विन्यास:
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
</string-array>
प्रयोग
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
मात्रा स्ट्रिंग्स (बहुवचन)
XML resource that carries different strings for pluralization.
वाक्य - विन्यास:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals
name="plural_name">
<item
quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
>text_string</item>
</plurals>
</resources>
उपयोग:
int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.plural_name, count, count);