আমি তার নাম দিয়ে স্ট্রিং বা ড্রয়যোগ্য এর মতো কোনও সংস্থান অ্যাক্সেস করতে চাই এবং এটির আইডি নয়।
আমি এর জন্য কোন পদ্ধতিটি ব্যবহার করব?
আমি তার নাম দিয়ে স্ট্রিং বা ড্রয়যোগ্য এর মতো কোনও সংস্থান অ্যাক্সেস করতে চাই এবং এটির আইডি নয়।
আমি এর জন্য কোন পদ্ধতিটি ব্যবহার করব?
উত্তর:
এটি এমন কিছু হবে:
R.drawable.resourcename
নিশ্চিত হয়ে নিন যে আপনার Android.R
নেমস্পেসটি আমদানি করা হয়নি কারণ এটি গ্রহটিকে বিভ্রান্ত করতে পারে (যদি আপনি এটি ব্যবহার করেন তবে)।
যদি এটি কাজ না করে, আপনি সর্বদা একটি প্রসঙ্গের getResources
পদ্ধতি ব্যবহার করতে পারেন ...
Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);
যেখানে this.context
একটি Activity
, Service
বা অন্য কোনও Context
সাবক্লাস হিসাবে অন্তর্নিহিত রয়েছে ।
হালনাগাদ:
আপনি যদি নামটি চান তবে এটি Resources
ক্লাসের (ফিরে getResources()
) একটি getResourceName(int)
পদ্ধতি আছে এবং ক getResourceTypeName(int)
?
আপডেট 2 :
Resources
বর্গ এই পদ্ধতি রয়েছে:
public int getIdentifier (String name, String defType, String defPackage)
যা নির্দিষ্ট সংস্থার নাম, প্রকার এবং প্যাকেজটির পূর্ণসংখ্যাকে প্রদান করে।
R.drawable.resourcename
হয় পূর্ণসংখ্যা।
যদি আমি সঠিক বুঝতে পারি তবে আপনি যা চান তা এই
int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());
"এটি" একটি ক্রিয়াকলাপ যেখানে কেবল স্পষ্ট করার জন্যই রচিত written
আপনি যদি স্ট্রিং.এক্সএমএল এ স্ট্রিং চান বা কোনও ইউআই উপাদান সনাক্তকারী চান তবে "অঙ্কনযোগ্য"
int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName());
আমি আপনাকে সতর্ক করে দিয়েছি, সনাক্তকারীদের প্রাপ্তির এই উপায়টি খুব ধীর, কেবল যেখানে প্রয়োজন সেখানে ব্যবহার করুন।
অফিসিয়াল ডকুমেন্টেশনের লিঙ্ক: রিসোর্স.জেটআইডিটিফায়ার (স্ট্রিং নাম, স্ট্রিং ডিফটাইপ, স্ট্রিং ডিফপ্যাকেজ)
int resourceID =
this.getResources().getIdentifier("resource name", "resource type as mentioned in R.java",this.getPackageName());
Kotlin Version
মাধ্যমেExtension Function
কোটলিনে এর নামে কোনও সংস্থান আইডি সন্ধান করতে কোটলিন ফাইলে স্নিপেটের নীচে যুক্ত করুন:
ExtensionFunctions.kt
import android.content.Context
import android.content.res.Resources
fun Context.resIdByName(resIdName: String?, resType: String): Int {
resIdName?.let {
return resources.getIdentifier(it, resType, packageName)
}
throw Resources.NotFoundException()
}
Usage
resIdByName
পদ্ধতি ব্যবহার করে আপনার যেখানে প্রসঙ্গের রেফারেন্স রয়েছে এখনই সমস্ত সংস্থান আইডিতে অ্যাক্সেসযোগ্য :
val drawableResId = context.resIdByName("ic_edit_black_24dp", "drawable")
val stringResId = context.resIdByName("title_home", "string")
.
.
.
স্ট্রিং থেকে রিসোর্স আইডি পাওয়ার সহজ উপায়। এখানে অ্যাশোর্সনাম হ'ল ড্রয়যোগ্য ফোল্ডারে রিসোর্স ইমেজভিউয়ের নাম যা এক্সএমএল ফাইলের মধ্যে অন্তর্ভুক্ত।
int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
ImageView im = (ImageView) findViewById(resID);
Context context = im.getContext();
int id = context.getResources().getIdentifier(resourceName, "drawable",
context.getPackageName());
im.setImageResource(id);
আমি আপনাকে আমার পদ্ধতিটি ব্যবহার করে কোনও সংস্থান আইডি পাওয়ার পরামর্শ দিচ্ছি। এটি getIdentidier () পদ্ধতিটি ব্যবহারের চেয়ে অনেক বেশি দক্ষ, যা ধীর।
কোডটি এখানে:
/**
* @author Lonkly
* @param variableName - name of drawable, e.g R.drawable.<b>image</b>
* @param с - class of resource, e.g R.drawable.class or R.raw.class
* @return integer id of resource
*/
public static int getResId(String variableName, Class<?> с) {
Field field = null;
int resId = 0;
try {
field = с.getField(variableName);
try {
resId = field.getInt(null);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return resId;
}
// image from res/drawable
int resID = getResources().getIdentifier("my_image",
"drawable", getPackageName());
// view
int resID = getResources().getIdentifier("my_resource",
"id", getPackageName());
// string
int resID = getResources().getIdentifier("my_string",
"string", getPackageName());
আমি এই শ্রেণিটি সম্পদের সাথে পরিচালনা করতে খুব সহায়ক বলে মনে করেছি। ডাইমেন, রঙ, অঙ্কনযোগ্য এবং স্ট্রিংগুলি ব্যবহার করার জন্য এর মতো কয়েকটি সংজ্ঞায়িত পদ্ধতি রয়েছে:
public static String getString(Context context, String stringId) {
int sid = getStringId(context, stringId);
if (sid > 0) {
return context.getResources().getString(sid);
} else {
return "";
}
}
@ লঙ্কলি সমাধান ছাড়াও
পদ্ধতি:
/**
* lookup a resource id by field name in static R.class
*
* @author - ceph3us
* @param variableName - name of drawable, e.g R.drawable.<b>image</b>
* @param с - class of resource, e.g R.drawable.class or R.raw.class
* @return integer id of resource
*/
public static int getResId(String variableName, Class<?> с)
throws android.content.res.Resources.NotFoundException {
try {
// lookup field in class
java.lang.reflect.Field field = с.getField(variableName);
// always set access when using reflections
// preventing IllegalAccessException
field.setAccessible(true);
// we can use here also Field.get() and do a cast
// receiver reference is null as it's static field
return field.getInt(null);
} catch (Exception e) {
// rethrow as not found ex
throw new Resources.NotFoundException(e.getMessage());
}
}
কোটলিনে নিম্নলিখিতগুলি আমার পক্ষে ভাল কাজ করে:
val id = resources.getIdentifier("your_resource_name", "drawable", context?.getPackageName())
যদি সংস্থানগুলি মিপম্যাপ ফোল্ডারে থাকে তবে আপনি "অঙ্কনযোগ্য" পরিবর্তে প্যারামিটার "মিপম্যাপ" ব্যবহার করতে পারেন।