首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ImageView网站下载DialogFragment图像后,青色条出现在DialogFragment上

从ImageView网站下载DialogFragment图像后,青色条出现在DialogFragment上
EN

Stack Overflow用户
提问于 2015-03-31 21:03:28
回答 1查看 65关注 0票数 1

我尝试从以下地址下载一个图像文件:http://i0.kym-cdn.com/photos/images/newsfeed/000/002/110/longcat.jpg

我使用了以下设置:

MainActivity.java

代码语言:javascript
复制
public class MainActivity
    extends ActionBarActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
        }
    }
}

PlaceholderFragment.java

代码语言:javascript
复制
public class PlaceholderFragment
    extends Fragment
{
    private Button button;

    public PlaceholderFragment()
    {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        button = (Button)rootView.findViewById(R.id.fragment_main_button);
        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                new ImageDownloadAsyncTask().execute("http://i0.kym-cdn.com/photos/images/newsfeed/000/002/110/longcat.jpg");
            }
        });
        return rootView;
    }


    public class ImageDownloadAsyncTask extends AsyncTask<String, Void, byte[]>
    {
        @Override
        protected byte[] doInBackground(String... params)
        {
            if(params.length <= 0)
            {
                return null;
            }

            byte[] imageData = null;
            String url = params[0];
            HttpURLConnection httpURLConnection = null;
            try
            {
                URL address = new URL(url);
                httpURLConnection = (HttpURLConnection)address.openConnection();
                httpURLConnection.setRequestMethod("GET");
                httpURLConnection.setDoInput(true);
                httpURLConnection.connect();
                if(httpURLConnection.getResponseCode() == 200)
                {
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    IOUtils.copy(httpURLConnection.getInputStream(), byteArrayOutputStream);
                    imageData = byteArrayOutputStream.toByteArray();
                }
                else
                {
                    return null;
                }
            }
            catch(MalformedURLException e)
            {
                e.printStackTrace();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if(httpURLConnection != null)
                {
                    httpURLConnection.disconnect();
                }
            }
            return imageData;
        }

        @Override
        protected void onPostExecute(byte[] bytes)
        {
            super.onPostExecute(bytes);
            if(bytes != null) {
                ImageDisplayDialogFragment imageDisplayDialogFragment = new ImageDisplayDialogFragment();
                imageDisplayDialogFragment.setTargetFragment(PlaceholderFragment.this, 0);
                Bundle bundle = new Bundle();
                bundle.putByteArray("imageData", bytes);
                imageDisplayDialogFragment.setArguments(bundle);
                imageDisplayDialogFragment.show(getActivity().getSupportFragmentManager(), ImageDisplayDialogFragment.TAG);
            } else {
                Toast.makeText(getActivity(), R.string.downloading_file_failed, Toast.LENGTH_LONG).show();
            }
        }
    }

}

ImageDisplayDialogFragment.java

代码语言:javascript
复制
public class ImageDisplayDialogFragment extends DialogFragment
{
    private ImageView imageView;

    public static final String TAG = ImageDisplayDialogFragment.class.getName();

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.dialogfragment_imagedisplay, container, false);
        imageView = (ImageView)view.findViewById(R.id.dialog_imagedisplay_imageview);
        byte[] imageData = getArguments().getByteArray("imageData");
        Bitmap bmp = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
        imageView.setMinimumWidth(bmp.getWidth());
        imageView.setMinimumHeight(bmp.getHeight());
        imageView.setImageBitmap(bmp);
        return view;
    }
}

因此,从技术上讲,我只是使用AsyncTask下载commons-io的内容到字节数组中,然后将字节数组发送到对话框片段中,在ImageView中显示。

对话框片段的XML布局如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/dialog_imagedisplay_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/longcat"
        android:layout_centerInParent="true"/>
</RelativeLayout>

然而,它在图像上方显示一个奇怪的青色线伪影,而且ImageView也比实际图像本身大。

图片:

我哪里会出错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-31 21:31:53

从您提供的屏幕截图和它是一个DialogFragment这一事实来看,我可以肯定地认为,蓝色的行/空格是对话框的标题栏(类似于,但与ActionBar略有不同)。为了禁用它,有一个内置方法:

代码语言:javascript
复制
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

这将禁用DialogFragment的标题栏。

有关更多信息,请参考文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29378527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档