У меня есть ImageView, что это набор для моего значка, как показано здесь:Разрешить пользователю изменить иконку
<ImageView
android:id="@+id/bwidgetOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/desc"/>
И я пытаюсь, чтобы позволить пользователю изменить его. Я разрешаю им делать это в классе, который я сделал с именем Personalize, и дать им возможность выбрать изображение из своей галереи, а затем показать это изображение в предварительном просмотре (другое изображение) до того, как они нажмут кнопку «Установить изображение», а затем картина, которую они выбрали отсылается к деятельности, чтобы установить значок, как это:
private void setIconImageInWidget() {
// TODO Auto-generated method stub
Log.d("Personalize", "setIconImageInWidget() called");
Intent i = getIntent();
//Convert bitmap to byte array to send back to activity
// See: http://stackoverflow.com/questions/11010386/send-bitmap-using-intent-android
scaleDownBitmapForIcon(b2, 500, this.getBaseContext());
Log.d("Personalize", "Scale Bitmap Chosen For Icon");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b2.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[]byteArray = stream.toByteArray();
i.putExtra("myIconBitmap", byteArray);
setResult(RESULT_ICON, i);
finish();
}
Тогда он установлен здесь:
else if(requestCode == RESULT_ICON){
byte[] byteArray = data.getByteArrayExtra("myIconBitmap");
Bitmap myIcon = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
setBackgroundImageForIcon(myIcon);
Log.d("Drag_and_Drop_App", "Icon is set");
}
((класс setBackgroundImageForIcon (ОБНОВЛЕНО):
private void setBackgroundImageForIcon(Bitmap bitmap) {
ImageView ivICON = (ImageView) findViewById(R.id.bwidgetOpen);
Drawable dq = new BitmapDrawable(getResources(), bitmap);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
ivICON.setImageDrawable(dq);
} else {
ivICON.setImageDrawable(dq);
Log.d("Drag_and_Drop_App", "Icon is set");
}
}
))
Это не вызывает ошибок и возвращает правильный код запроса, но, похоже, он вообще не меняет значок. Я также сделал так, что, когда пользователь выходит из программы, он сохраняет путь изображения, а затем перезагружает его по методу onResume().
Таким образом, моя проблема заключается в том, что значок не установлен на выбранный пользователем образ. Почему это?
Если я собираюсь сделать это неправильно или вам нужно реализовать еще какой-либо код, пожалуйста, дайте мне знать.
ДОБАВЛЕНО:
я, вероятно, на самом деле следовало бы добавить это, когда я писал этот вопрос, но ... Просто так известно, это настроен как виджет, так вот мой AppWidgetProvider, а также:
package com.example.awesomefilebuilderwidget;
IMPORTS
public class AFBWidget extends AppWidgetProvider{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
Random r = new Random();
int randomInt = r.nextInt(1000000000);
String rand = String.valueOf(randomInt);
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++){
int awID = appWidgetIds[i];
RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget);
v.setTextViewText(R.id.tvwidgetUpdate, rand);
Intent configIntent = new Intent(context, Drag_and_Drop_App.class);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
v.setOnClickPendingIntent(R.id.bwidgetOpen, configPendingIntent);
appWidgetManager.updateAppWidget(awID, v);
}
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
Toast.makeText(context, "Thanks for checking us out!", Toast.LENGTH_SHORT).show();
}
}
Вы изменения фона в LinearLayout или ImageView? Вы устанавливаете фон linearlayout в методе setBackgroundImageForIcon() – chinglun
А, спасибо, я забыл изменить это. Да, я меняю изображение, а не фон. Я изменил свою кодировку на вышеупомянутую (проверьте обновленный вопрос), но она по-прежнему не меняет значок. – user2909006