从Android 19(KITKAT)开始,我再也无法在代码中动态调整AlertDialog中的图标。它在Android 8 - 16中有效。现在,它只显示原始宽度和高度的图标 - 而不是调整大小的图标。
请注意,这些图像是从我的服务器中即时下载的,同一个对话框将根据用户的选择显示不同的图像。
这是以前为我工作的东西。有关如何为Android 19 +更新它的任何建议?
注意:我已经尝试过Bitmap.createScaledBitmap解决方案(参见注释掉的行)。它没有效果。
Uri downloadedIcon = Uri.parse( "file://" + filePath );
BitMap bm = Media.getBitmap( getContentResolver(), downloadedIcon );
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
if (width >= 2000) {
bm.setDensity(840);
//bm = Bitmap.createScaledBitmap(bm,920,920,true);
} else if (width >= 1440) {
bm.setDensity(640);
//bm = Bitmap.createScaledBitmap(bm,700,700,true);
} else if(width >= 1024)
// etc
}
BitmapDrawable icon = new BitmapDrawable(bm);
AlertDialog theAlert = new AlertDialog.Builder(MyActivity.this)
.setTitle("My Title")
.setMessage("My Description")
.setIcon(-1).setIcon(icon)
theAlert.show();
答案 0 :(得分:1)
好的,我通过创建自己的对话框布局解决了这个问题。
问题是在Android 19+中,默认(系统)对话框布局会强制缩小图标的src。所以要做大 - 你需要忘记图标,并停止使用它。而是在您自己的自定义布局中定义一个新的ImageView。
custom_dialog.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/dialog_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitStart"
android:adjustViewBounds="true" />
</RelativeLayout>
<TextView
android:id="@+id/desc"
android:text="DESCRIPTION GOES HERE"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:typeface="serif"
android:textSize="17sp" />
</LinearLayout>
在给ImageView充气后,我用动态BitMap覆盖它,如下所示:
Uri downloadedIcon = Uri.parse( "file://" + filePath );
BitMap bm = Media.getBitmap( getContentResolver(), downloadedIcon );
View dialogView = getLayoutInflater().inflate(R.layout.my_custom_dialog, null);
ImageView pic = (ImageView) dialogView.findViewById(R.id.dialog_pic);
pic.setImageBitmap( bm );
TextView desc = (TextView) dialogView.findViewById(R.id.desc);
desc.setText("My Description Text");
AlertDialog theAlert = new AlertDialog.Builder(ScriptMenuActivity.this)
.setView(dialogView)
.setTitle("My Title Text")
.setNegativeButton("Back", null)
.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// do stuff
}}).create();
theAlert.show();
通过ImageView的“adjustViewBounds”和“scaleType”属性,对比图片按比例调整大小以适应对话框窗口。