按鈕背景資源來自 SD 卡路徑,而非 R.drawable。
Button btn = new Button(context);
String path = "/mnt/sdcard/test.png"; // 或 Environment.getExternalStorageDirectory()
Bitmap bitmap = BitmapFactory.decodeFile(path);
if (bitmap != null) {
Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
btn.setBackgroundDrawable(drawable); // API 16- 用 setBackgroundDrawable
// API 16+ 建議 btn.setBackground(drawable);
}
READ_EXTERNAL_STORAGE (API 19+ 需動態申請)/mnt/sdcard,用 Environment.getExternalStorageDirectory() 或 Context.getExternalFilesDir()BitmapFactory.Options.inSampleSizeStateListDrawable 並添加多個 BitmapDrawableStateListDrawable states = new StateListDrawable();
states.addState(new int[]{android.R.attr.state_pressed}, new BitmapDrawable(res, pressedBmp));
states.addState(new int[]{}, new BitmapDrawable(res, normalBmp));
btn.setBackgroundDrawable(states);