从动态BitMap调整AlertDialog图标的大小

时间:2015-09-09 07:40:04

标签: android bitmap resize icons alertdialog

从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();

1 个答案:

答案 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”属性,对比图片按比例调整大小以适应对话框窗口。