私は解決策を思いつきました。主なエラーは、getIdentifier に適切なパッケージを取得できなかったことだと思います。
ここにいくつかのソースがあります(一部を削除する必要があったため、軽微なエラーがある可能性があります)。
私のカスタムボタン(Java):
public class CustomImageButton extends RelativeLayout
{
...
public CustomImageButton(Context context, AttributeSet attrs)
{
super(context, attrs);
LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inf.inflate( <my_xml_file> , this, true);
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.CustomImageButton);
CharSequence imageSrc = arr.getString(R.styleable.CustomImageButton_src);
if (imageSrc != null)
{
String fileName = new File("" + imageSrc).getName();
fileName = fileName.substring(0, fileName.indexOf("."));
int resId = getResources().getIdentifier(fileName, "drawable", <my_top_level_package_very_important_to_get_right>);
ImageButton button = ((ImageButton) findViewById(R.id.buttonImage));
button.setImageDrawable(getResources().getDrawable(resId));
}
}
...
}
attrs.xml では、上記の「src」が使用されます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomImageButton">
<attr name="src" format="string" />
</declare-styleable>
...
</resources>
次に、レイアウト xml から使用できます。「xmlns:customimagebutton」に注意してください。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:customimagebutton="http://schemas.android.com/apk/res-auto"
....>
<my.package.custom.MyCustomButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
customimagebutton:src="@drawable/my_image" />
</RelativeLayout>