অ্যান্ড্রয়েড অঙ্কনযোগ্য ডিরেক্টরিতে কি উপ-ডিরেক্টরি থাকতে পারে?


496

অ্যান্ড্রয়েড এসডিকে ডকুমেন্টেশনে, @ অঙ্কনযোগ্য / মাই_আইমেজ এক্সএমএল সিনট্যাক্সের সাথে ব্যবহৃত সমস্ত উদাহরণ আমার চিত্রের রেজ / ড্রইং ডিরেক্টরিতে সঞ্চিত চিত্রগুলিকে সরাসরি সম্বোধন করে।

আমি ভাবছি যে স্পষ্টভাবে অঙ্কনযোগ্য ডিরেক্টরিতে একটি সাব ডিরেক্টরি তৈরি করা ঠিক নয়।

উদাহরণস্বরূপ, আমার যদি নিম্নলিখিত ডিরেক্টরি বিন্যাস থাকে:

res/drawable
-- sandwiches
  -- tunaOnRye.png
  -- hamAndSwiss.png
-- drinks
  -- coldOne.png
  -- hotTea.png

আমি কি টুনা সালাদ স্যান্ডউইচের চিত্রটিকে @ ছবি / স্যান্ডউইচ / টুনাআনআরআই হিসাবে উল্লেখ করতে পারি?

বা আমাকে কি অঙ্কনযোগ্য ডিরেক্টরিতে ক্রমবর্ধমান সমতল রাখতে হবে?


16
অনুগ্রহ করে নোট করুন যে বড় বড় অক্ষরগুলি রেস ডিরেক্টরিতে অনুমোদিত নয়।
টাইলার

1
: আপনি শুধুমাত্র Gradle সঙ্গে এটা করতে পারেন stackoverflow.com/a/19859379
Yair Kukielka

2
এটা আছে কি সম্ভব সহোদর অঙ্কনযোগ্য বৈশিষ্ট্য সহ, অঙ্কনযোগ্য করার ডিরেক্টরি? সুতরাং, রেজ / ট্যাঙ্কস / ড্রবল- [এইচডিপিআই .. ইত্যাদি] এবং আরও কি?
ফ্যাটি

উত্তর:


545

না, অঙ্কনযোগ্য ডিরেক্টরিতে রিসোর্স মেকানিজম সাবফোল্ডারগুলিকে সমর্থন করে না, তাই হ্যাঁ - আপনাকে সেই স্তরক্রম সমতল রাখতে হবে।

আপনি যে ডিরেক্টরি বিন্যাসটি দেখিয়েছেন তার ফলে চিত্রগুলির কোনওটিই উপলব্ধ নয় available

আমার নিজের পরীক্ষা-নিরীক্ষাগুলি থেকে মনে হয় যে কোনও res/drawableফোল্ডারের মধ্যে কোনও আইটেম সহ একটি সাবফোল্ডার থাকার ফলে সংস্থান সংকলকটি ব্যর্থ হয়ে যাবে - R.javaফাইলটি সঠিকভাবে উত্পন্ন হতে বাধা দেয় ।


135
অ্যান্ড্রয়েড ২.২ হিসাবে, এটি সংকলক ত্রুটির কারণ করে না, তবে আর বর্গ তৈরি করার সময় কোনও উপ-ডিরেক্টরিকে উপেক্ষা করা হয়। এটি সত্যই সফল হয় এবং বড় প্রকল্পগুলি পরিচালনা করতে এটি শক্ত করে তোলে। = /
নিক রেইমান

69
সম্পূর্ণ একমত. সাব-ফোল্ডারগুলিকে সমর্থন করার জন্য তাদের আরও ভাল সমাধান নিয়ে আসা দরকার। এটা এত কঠিন হতে পারে না।
znq

13
আশা করি এটি খুব শীঘ্রই সমাধান হয়ে যাবে, আমি 100 টিরও বেশি সম্পত্তি পেয়েছি এবং তারপরেও আমি তাদের কয়েকটিকে কোড করে দিয়েছি। মোট রাতের ঘোড়া কোনও প্রান্তিক জটিল প্রকল্প পরিচালনা করার চেষ্টা করছে।
এমিল

14
এটি অ্যান্ড্রয়েড ইস্যু ট্র্যাকারে সম্পর্কিত ইস্যু: কোড. google.com/p/android/issues/detail?id=2018
espinchi

44
আপনাকে অ্যান্ড্রয়েডকে অভিশাপ দিন
হুইটনিল্যান্ড

149

আমি যে ওয়ার্কআরউন্ডটি ব্যবহার করছি (এবং যার মধ্যে একটি অ্যান্ড্রয়েড নিজেই এটির পক্ষে মনে হয়) তা হল মূলত একটি ফরোয়ার্ড স্ল্যাশের জন্য একটি আন্ডারস্কোরের বিকল্প হিসাবে কাজ করা, যাতে আপনার কাঠামোটি দেখতে এরকম কিছু হবে:

sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png

পদ্ধতির জন্য আপনাকে নিজের নামকরণের ক্ষেত্রে সূক্ষ্ম হতে হবে এবং ফাইলগুলি নিজেরাই র‌্যাংগল করা খুব সহজ করে তুলবে না (যদি আপনি সিদ্ধান্ত নিয়েছিলেন যে পানীয় এবং স্যান্ডউইচগুলি আসলেই সমস্ত হওয়া উচিত food", তবে আপনাকে কেবল সাধারণ পরিবর্তনের পরিবর্তে একটি নতুন নামকরণ করতে হবে) তাদের ডিরেক্টরিতে সরানো); তবে আপনার প্রোগ্রামিং যুক্তির জটিলতা ফোল্ডার কাঠামোর সমতুল্যের তুলনায় খুব খারাপভাবে ক্ষতিগ্রস্থ হয় না।

এই পরিস্থিতি সত্যই sucks। অ্যান্ড্রয়েড হ'ল বিস্ময়কর এবং ভয়ঙ্কর ডিজাইনের সিদ্ধান্তগুলির একটি মিশ্র ব্যাগ। আমরা কেবলমাত্র পরবর্তী অংশের জন্য সমস্ত তাত্ক্ষণিকভাবে আগাছা ফেলার জন্য আশা করতে পারি :)


31
অঙ্কনযোগ্য ফোল্ডারে বড় হাতের অক্ষরের অনুমতি নেই letters আমি ত্রুটিটি পেয়েছি: "অবৈধ ফাইলের নাম: অবশ্যই কেবল [a-z0-9_] থাকতে হবে"
জেসন

5
"দুর্দান্ত এবং ভয়ানক ডিজাইনের সিদ্ধান্তগুলির মিশ্র ব্যাগ" এর জন্য +1
ব্রেন্ট ফাউস্ট

1
খুব কমই কাজ করা উচিত: বরং "সম্পূর্ণ পাগল না হওয়ার জন্য আপনার কী করা উচিত"। এটি একটি ডিরেক্টরিতে সীমাবদ্ধ থাকা হাস্যকর।
রিচিএইচএইচ

35

আসলে, অ্যান্ড্রয়েড স্টুডিওতে এটি সম্ভব। এখানে প্রদর্শিত হিসাবে আপনার নেস্টেড সংস্থান থাকতে পারে :

এখানে চিত্র বর্ণনা লিখুন

এছাড়া গোষ্ঠী রিসোর্সগুলি করার জন্য একটি প্লাগ হয় এখানে


হাই, @ অ্যান্ড্রয়েড বিকাশকারী! আমি বিল্ড.gradle ফাইলে এটি যুক্ত করার চেষ্টা করেছি: সোর্সসেটস {প্রধান {রেজ {এসসিআরডিআর 'এসসিআর / প্রধান / রেজ / ড্রইয়েবল / আইসি-টগল'}}}, তবে আমি এক্সএমএলএনএসের জন্য "উরি নিবন্ধভুক্ত নয়" পেয়েছি : অ্যান্ড্রয়েড = " স্কিমাস.অ্যান্ড্রয়েড . com/apk/res /android । কী হতে পারে?
অ্যালেক্সকোস্ট

@ অ্যালেক্সকোস্ট আমি আসলে এটি একবারই চেষ্টা করেছি। আমি সাহায্য করার জন্য এটির সাথে যথেষ্ট অভিজ্ঞ নই। দুঃখিত।
অ্যান্ড্রয়েড বিকাশকারী

@ রাহুলমন্ডালিয়া এটি সম্ভব হলেও, আমি এটি ব্যবহার না করার পরামর্শ দিই।
অ্যান্ড্রয়েড বিকাশকারী

পছন্দ করুন
জোশ হানসেন

1
@ জোশহানসেন এটি অগোছালো।
অ্যান্ড্রয়েড বিকাশকারী

34

হ্যাঁ - এটি স্তন্যপান করে :) তবে আপনি সম্পদ ফোল্ডারটি ব্যবহার করতে পারেন এবং সেখানে উপ ডিরেক্টরি থাকতে পারেন এবং সেভাবে চিত্রগুলি লোড করতে পারেন।


6
সমস্যাটি কেবল অঙ্কনযোগ্য ফোল্ডারের জন্যই নয়, লেআউট ফোল্ডারের ক্ষেত্রেও রয়েছে :( আমার লেআউটটির ফোল্ডারে 100 টিরও বেশি এক্সএমএল ফাইল রয়েছে এবং এটিতে সঠিক এক্সএমএল লেআউটটি খোলাই আমার পক্ষে শক্ত।
অ্যান্টিকাফ

অন্যান্য আপত্তিগুলির জন্য সংস্থান করুন, সংস্থানগুলি সহজেই স্থানীয়করণ করা যেতে পারে তবে এএফআইএইকে সম্পদের জন্য অন্তর্নির্মিত কোনও ব্যবস্থা নেই।
ফ্রান মারজোয়া

@ আইটিকা আপনার আইডিইতে "রিসোর্সে যান" ব্যবহার করুন (উপগ্রহ: সিটিআরএল + শিফট + আর, আইডিইএ / অ্যান্ড্রয়েড স্টুডিও: সিটিআরএল + শিফট + এন)
টিডব্লাইস্টেররব

23

সম্পদ ফোল্ডার ব্যবহার করুন।

কোডের উদাহরণ:

InputStream is = null;
try {
    is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
    ;
}

image = BitmapFactory.decodeStream(is);

5
এই পদ্ধতির সাথে একমাত্র সমস্যাটি হ'ল বিটম্যাপগুলি ব্যবহারের সাথে যুক্ত অনেক বেশি হোমওয়ার্ক রয়েছে। অ্যান্ড্রয়েডের রিসোর্স সিস্টেম মেমরি পরিচালনার অনেক ভাল কাজ করে। অ্যান্ড্রয়েড ইতিমধ্যে এটি ব্যবহার করে থাকলে আপনি কেন একটি মেমরি পরিচালনা ব্যবস্থা পুনর্নির্মাণ করবেন? এস্পিকভাবে যদি তার কাছে 100+ চিত্র থাকে তবে এটি বিটম্যাপগুলি লোডিং এবং রিলিজ করে অনেক।
রেভ টাইলার

18
এটি একটি আসল সমস্যা হ'ল আপনি যদি নিজের অ্যাপ্লিকেশনকে স্থানীয়করণের পরিকল্পনা করেন, তবে আপনার কাছে বিভিন্ন স্ক্রিন ঘনত্বের জন্য বিভিন্ন সংস্থান রয়েছে, তাই এটি কোনও সমাধান নয়, কেবলমাত্র কয়েকটি ক্ষেত্রে বৈকল্পিক বৈধ।
ফ্রান মারজোয়া

1
আমাকে কমপক্ষে এক হাজার আপোভেট @ ফ্রন্টের মন্তব্য দিতে হবে :)
এইচজিপিবি

22

আমি একটি গ্রহন প্লাগইন লিখেছি যা ফাইলের নাম দুটি আন্ডারস্কোর দিয়ে আলাদা করে ভার্চুয়াল সাবফোল্ডার তৈরি করতে দেয় __। প্রকল্পটি প্রাথমিক পর্যায়ে রয়েছে তবে চিন্তা করবেন না যে এটি আপনার আইডিই ক্র্যাশ করবে না

এখানে আরও বিশদ পাওয়া যাবে, বিনা দ্বিধায় কল করুন এবং টানুন অনুরোধগুলি প্রেরণ করুন:

https://github.com/kirill578/Android-Sorted-Res-Folder

এখানে চিত্র বর্ণনা লিখুন


2
নিস! এটিকে অ্যান্ড্রয়েড স্টুডিওতেও পোর্ট করার কোনও সুযোগ?
বিভিবি

1
আমি বর্তমানে অ্যান্ড্রয়েড স্টুডিওটিও ব্যবহার করছি না, তাই আমার ধারণা, এটির জন্য কিছু অভিজ্ঞ ব্যক্তির অপেক্ষা করতে হবে।
কিরিল কুলকভ

9

আমি ডিজাইনারদের দ্বারা সরবরাহ করা একটি সংগঠিত ডিরেক্টরি কাঠামো সমতল করার জন্য একটি সহজ স্ক্রিপ্ট ব্যবহার করতে চাই যা কোনও আর ফাইল তৈরি করতে ব্যবহার করা যেতে পারে।

অঙ্কনযোগ্য-এইচডিপিআই-তে বর্তমানের পথে চলুন:

#! /bin/bash
DIRS=`find * -type d`
for dir in ${DIRS} ; do 
  for file in `ls ${dir}` ; do
    mv ${dir}/${file}  ${dir}_${file};
  done 
  rmdir ${dir};
done

1
ফোল্ডারগুলির নীচে সাব ফোল্ডার থাকলে আপনার স্ক্রিপ্ট কাজ করবে না। আমার মনে হয় আপনার সমস্ত '/' কে _ ir dir in '_' দিয়ে প্রতিস্থাপন করতে হবে}
Seunghoon

9

গ্রেড সহ অ্যান্ড্রয়েড স্টুডিওতে আপনার একাধিক উত্স পরিচালক থাকতে পারে যা আপনাকে সংস্থানগুলি পৃথক করার অনুমতি দেবে। উদাহরণ স্বরূপ:

android {
    ....
    android.sourceSets {
        main.res.srcDirs = ['src/main/extraresdirnamed_sandwiches', 'src/main/res']
    }
    ....
}

তবে নামগুলি অবশ্যই সংঘটিত হবে না যার অর্থ আপনার এখনও স্যান্ডউইচ_ফুনাঅনরয়ের মতো নাম থাকা দরকার তবে আপনার সমস্ত স্যান্ডউইচের জন্য একটি পৃথক বিভাগ রাখতে সক্ষম হবেন।

এটি আপনাকে বিভিন্ন কাঠামোগুলিতে আপনার সংস্থানগুলি সঞ্চয় করতে দেয় (অটো বার্নড জেনারেটরের মতো অটো উত্পাদিত সামগ্রীর জন্য দরকারী)


4

আংশিক সমস্যার সমাধানের এক উপায় হ'ল এপিআই লেভেল প্রত্যয় ব্যবহার করা। আমি একই এপিকে একাধিক সাব প্রকল্পগুলি রাখতে res / লেআউট-ভি 1, রেস / লেআউট-ভি 2 ইত্যাদি ব্যবহার করি। এই প্রক্রিয়াটি সমস্ত সংস্থার ধরণের জন্য ব্যবহার করা যেতে পারে।

স্পষ্টতই, আপনি কেবলমাত্র রেস / লেআউট-ভি এর উপরে এপিআই স্তরগুলি লক্ষ্য করে থাকলে এটি ব্যবহার করা যেতে পারে? আপনি ব্যবহার করছেন.

এছাড়াও, অ্যান্ড্রয়েড 1.5 এবং 1.6 এ বাগটি দেখুন। এপিআই লেভেল প্রত্যয় সম্পর্কে অ্যান্ডোরয়েড ডকুমেন্টেশন দেখুন


যার কাছে এই উত্তরটি হ্রাস পেয়েছে: আপনি কেন ব্যাখ্যা করতে পারেন? এই প্রক্রিয়াটি যদিও সুন্দর নয় তবে আমার পক্ষে ভাল কাজ করে।
ওফারআর

4

লাইব্রেরি সিস্টেমের আবির্ভাবের সাথে, সম্পদের বড় সংকলন অনুসারে একটি গ্রন্থাগার তৈরি করা সমাধান হতে পারে।

এটি এখনও সমস্যাযুক্ত কারণ সকলকে সম্পদের মধ্যে একই নাম ব্যবহার করা এড়াতে হবে তবে লাইব্রেরি প্রতি উপসর্গের স্কিম ব্যবহার করা উচিত এটির সাথে সহায়তা করে।

এটি ফোল্ডার তৈরি করতে সক্ষম হওয়ার মতো সহজ নয় তবে জিনিসগুলি বুদ্ধিমান রাখতে সহায়তা করে ...


হ্যাঁ, আমি মনে করি এটি ভাল। আমি যদি আমার অঙ্কনযোগ্য-এলডিপিআই ইত্যাদি ফোল্ডারে দেশের পতাকাগুলি যুক্ত করি তবে সেগুলি জলাবদ্ধ হয়ে যাবে। আমি মনে করি যে সমস্ত জেনেরিক সংস্থার জন্য একটি লাইব্রেরি প্রকল্প তৈরি করা আপনি যে প্রকল্পে সক্রিয়ভাবে কাজ করছেন তাতে থাকা বিশৃঙ্খলা হ্রাস করতে সহায়তা করবে। আপনি অবাক হলেন মাত্র 1 টি আপভোট।
টম

3

এই অবস্থার জন্য একটি কার্যকারিতা রয়েছে: আপনি resVectorডিফল্ট হিসাবে একই স্তরে একটি (উদাহরণস্বরূপ) ফোল্ডার তৈরি করতে পারেনres ফোল্ডার । সেখানে আপনি যে কোনও drawable-xxxসংস্থান ফোল্ডার যুক্ত করতে পারেন :

resVector
-drawable
-layout
-color

এর পরে আপনার যা দরকার তা হল যুক্ত করা

sourceSets {
        main.res.srcDirs += 'src/main/resVector'
    }

আপনার build.gradleফাইলের মধ্যে (ভিতরে android { })।


দুঃখের সাথে তারা "অ্যান্ড্রয়েড" দৃষ্টিকোণটি ব্যবহার করার সময় অ্যান্ড্রয়েড স্টুডিওতে প্রকল্প প্যানেলে একত্রে মিশে গেছে :(
অজাহানচর্লস

@ অজাহানচর্লেস - আমি এই দৃষ্টিকোণটি মোটেও ব্যবহার না করা পছন্দ করি (যাইহোক - আমি সবসময় 'ডিসট্রেশন ফ্রি মোডে কাজ করি) ... তবে আপনি ঠিক বলেছেন - "অ্যান্ড্রয়েড" সমস্ত কিছু একত্রিত করে।
আন্তন ডেরেভ্যাঙ্কো

1

এটি নিখুঁত পদ্ধতি নয়। আপনাকে এখানে একইভাবে কার্যকর করতে হবে ।

আপনি যে কোডটি ব্যবহার করতে পারেন তার মাধ্যমে আপনি ফোল্ডারের নীচে চিত্রটিও কল করতে পারেন

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

1

আমার নয় তবে এই সমস্যাটি অনুসন্ধান করার সময় আমি এই থ্রেডটি পেয়েছি, যদি আপনি অ্যান্ড্রয়েড স্টুডিও এবং গ্রেডল বিল্ড সিস্টেম ব্যবহার করেন তবে এটির পক্ষে সহজ কোনও প্লাগইন দরকার নেই কেবলমাত্র কিছু বিল্ড ফাইল সম্পাদনা

https://stackoverflow.com/a/22426467/618419


1

অ্যান্ড্রয়েড স্টুডিও সহ গ্রেডল এটি এইভাবে করতে পারে ( লিঙ্ক )।

এটি "কাঠামোর কনফিগারেশন" অনুচ্ছেদে রয়েছে

sourceSets {
 main {
    java {
        srcDir 'src/java'
    }
    resources {
        srcDir 'src/resources'
    }
 }
}

1

মূলত একটি ফোল্ডার তৈরি করুন। পছন্দ: 'পুনঃনির্ধারণ_বিটিএন'

এবং গাছের ফোল্ডার তৈরি করুন। যেমন 'ড্রয়যোগ্য' বা 'লেআউট'

তারপরে 'build.gradle' এ এটি যুক্ত করুন

sourceSets
            {
                main
                {
                    res
                    {
                        srcDirs = ['src/main/res_notification_btn', 'src/main/res']
                      or
                        srcDir 'src/main/res_notification_btn'
                    }
                }
            }

0
#!/usr/bin/env ruby

# current dir should be drawable-hdpi/ etc

# nuke all symlinks
Dir.foreach('.') {|f|
    File.delete(f) if File.symlink?(f)
}

# symlink all resources renaming with underscores
Dir.glob("**/*.png") {|f|
    system "ln -s #{f} #{f.gsub('/', '_')}" if f.include?("/")
}

এই সমস্ত কাজটি চিজমিস্টার দ্বারা প্রস্তাবিত কর্মচালিত স্বয়ংক্রিয়ভাবে করা। এটা আমার জন্য কাজ করছে ... ডাউনটা বোঝানোর জন্য যত্নশীল?
ব্লেক মিলার


0

সম্পদ / আপনি কাঁচা সম্পদ ফাইল সঞ্চয় করতে এটি ব্যবহার করতে পারেন। আপনি এখানে যে ফাইলগুলি সংরক্ষণ করেন সেগুলি একটি .apk ফাইলটিকে যেমন রয়েছে তেমনভাবে সংকলন করা হয়েছে এবং মূল ফাইলের নামটি সংরক্ষণ করা হয়েছে। আপনি ইউআরআই ব্যবহার করে একটি সাধারণ ফাইল সিস্টেমের মতো একইভাবে এই ডিরেক্টরিটি নেভিগেট করতে পারেন এবং অ্যাসেটম্যানেজার ব্যবহার করে ফাইলগুলি বাইটের স্ট্রিম হিসাবে পড়তে পারেন। উদাহরণস্বরূপ, এটি টেক্সচার এবং গেম ডেটার জন্য একটি ভাল অবস্থান। http://developer.android.com/tools/projects/index.html


0

উপ-ডিরেক্টরিগুলি অনুমোদিত নয়, উত্সটিতে কেবল [a-z0-9_।] থাকতে হবে।

না আপনার কাছে বড় হাতের অক্ষর নেই, এবং কোনও ফরোয়ার্ড স্ল্যাশ নেই।


-3
  1. অঙ্কনযোগ্য উপর ডান ক্লিক করুন
  2. নতুন ---> ডিরেক্টরি নির্বাচন করুন
  3. ডিরেক্টরি নাম লিখুন। উদাহরণস্বরূপ: logo.png (অবস্থানটি ডিফল্টরূপে অঙ্কনযোগ্য ফোল্ডারটি দেখিয়ে দেবে)
  4. ছবিগুলি অনুলিপিযোগ্য ফোল্ডারে সরাসরি অনুলিপি করুন এবং আটকান। পেস্ট করার সময় আপনি তালিকা থেকে প্রতিটি চিত্রের জন্য এমডিপিআই / এক্সএইচডিপি / এক্সএক্সএইচডিপি ইত্যাদি চয়ন করতে পারেন। উপযুক্ত বিকল্পটি নির্বাচন করুন এবং চিত্রটির নাম লিখুন। ডিরেক্টরি নাম যেমন লোগো.পং হিসাবে একই নাম রাখা নিশ্চিত করুন
  5. বাকি চিত্রগুলির জন্য একই করুন। এগুলির সবগুলি লোগো.পিএনজি ফোল্ডারের নীচে স্থাপন করা হবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.