ฉันจะรับรหัสทรัพยากรของรูปภาพได้อย่างไรถ้าฉันรู้ชื่อ (ใน Android)
ฉันจะรับรหัสทรัพยากรของรูปภาพได้อย่างไรถ้าฉันรู้ชื่อ (ใน Android)
คำตอบ:
ด้วยสิ่งนี้:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());เพื่อรับ ID ของ ImageButton (เหมือนที่คุณทำกับ R.id.name)
                    name? ฉันต้องการค้นหารหัสของปุ่มที่มีข้อมูลอ้างอิงที่ฉันรู้ในกรณีของฉันคือbutton1
                    getResource()และgetPackageName()แสดงข้อผิดพลาด cannot resolve method
                    getResource()และgetPackageName()เป็นวิธีการจากกิจกรรม
                    คุณยังสามารถลองสิ่งนี้:
try {
    Class res = R.drawable.class;
    Field field = res.getField("drawableName");
    int drawableId = field.getInt(null);
}
catch (Exception e) {
    Log.e("MyTag", "Failure to get drawable id.", e);
}
ฉันได้คัดลอกซอร์สโค้ดนี้จาก URL ด้านล่าง จากการทดสอบในหน้านี้เร็วกว่า getIdentifier () 5 เท่า ฉันยังพบว่ามันสะดวกและใช้งานง่ายกว่า หวังว่ามันจะช่วยคุณเช่นกัน
ตัวอย่างทรัพยากรระบบสาธารณะ:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");

อีกวิธีหนึ่งคือการอ้างอิงเอกสารสำหรับคลาสandroid.R.drawable
คุณสามารถใช้ฟังก์ชันนี้เพื่อรับรหัสทรัพยากร:
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
    try {
        return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        throw new RuntimeException("Error getting Resource ID.", e)
    } 
}
ดังนั้นหากคุณต้องการรับรหัสทรัพยากรแบบวาดได้คุณสามารถเรียกใช้เมธอดดังนี้:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(หรือจากส่วนย่อย):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
สำหรับString Resource ID คุณสามารถเรียกมันได้ดังนี้:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
ฯลฯ ...
ข้อควรระวัง : มันพ่น RuntimeException หากไม่พบรหัสทรัพยากร อย่าลืมกู้คืนอย่างถูกต้องในการผลิต
staticมิฉะนั้นgetResources()จะไม่ได้ผล
                    Contextนั้นไม่สามารถใช้ได้ การแก้ไขคือการลบstaticและย้ายไปเป็นContext(เช่นActivityหรือApplication); หรือการแก้ไขทางเลือกคือสิ่งที่โจนาธานทำในการแก้ไขของเขาซึ่งก็คือการส่งต่อContextไปยังวิธีการ
                    อีกสถานการณ์หนึ่งที่ฉันพบ
สตริง imageName = "สวัสดี" จากนั้นเมื่อส่งผ่านไปยังฟังก์ชัน getIdentifier เป็นอาร์กิวเมนต์แรกชื่อจะส่งผ่านชื่อที่มีการยกเลิกสตริงว่างและจะคืนค่าศูนย์เสมอ ส่ง imageName.substring นี้ (0, imageName.length () - 1)