Android编程权威指南(第30章 网页浏览)

本文介绍了在Android应用中如何使用Flickr数据创建图片URL,并通过隐式Intent实现网页浏览。同时,详细讲解了使用WebView展示网页的步骤,包括创建PhotoPageFragment和PhotoPageActivity,以及如何启动和优化WebView显示。最后,讨论了使用WebChromeClient来处理网页加载进度和标题显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、最后一段Flickr数据

1.添加创建图片URL的代码(GalleryItem.java)

private String mOwner;
    public String getOwner() {
        
        return mOwner;
    }

    public void setOwner(String owner) {
        mOwner = owner;
    }

    public Uri getPhotoPageUri() {
        return Uri.parse("http://www.flickr.com/photos/")
                .buildUpon()
                .appendPath(mOwner)
                .appendPath(mId)
                .build();
    }

在这里插入图片描述
在这里插入图片描述
2.从JSON数据中获取owner属性(FlickrFetchr.java)

item.setOwner(photoJsonObject.getString("owner"));

在这里插入图片描述

二、简单方式:隐式intent

1.通过隐式intent实现网页浏览(PhotoGalleryFragment.java)

implements View.OnClickListener{

private GalleryItem mGalleryItem;

itemView.setOnClickListener(this);
public void bindGalleryItem(GalleryItem galleryItem) {
            mGalleryItem = galleryItem;
        }

        @Override
        public void onClick(View v) {
            Intent i = new Intent(Intent.ACTION_VIEW, mGalleryItem.getPhotoPageUri());
            startActivity(i);
        }
    }

在这里插入图片描述
在这里插入图片描述
2.绑定GalleryItem(PhotoGalleryFragment.java)

photoHolder.bindGalleryItem(galleryItem);

在这里插入图片描述

三、较难方式:使用WebView

1.创建网页浏览fragment(PhotoPageFragment.java)
新建PhotoPageFragment类

public class PhotoPageFragment extends VisibleFragment {
    private static final String ARG_URI = "photo_page_url";

    private Uri mUri;
    private WebView mWebView;
    private ProgressBar mProgressBar;

    public static PhotoPageFragment newInstance(Uri uri) {
        Bundle args = new Bundle();
        args.putParcelable(ARG_URI, uri);

        PhotoPageFragment fragment = new PhotoPageFragment();
        fragment.setArguments(args);
        return fragment;
    }
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mUri = getArguments().getParcelable(ARG_URI);
    }
        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_photo_page, container, false);
       mWebView = (WebView) v.findViewById(R.id.web_view);
       return v;
       }

在这里插入图片描述
在这里插入图片描述
2.创建显示网页的activity(PhotoPageActivity.java)
新建PhotoPageActivity类

public class PhotoPageActivity extends SingleFragmentActivity {

    public static Intent newIntent(Context context, Uri photoPageUri) {
        Intent i = new Intent(context, PhotoPageActivity.class);
        i.setData(photoPageUri);
        return i;
    }

    @Override
    protected Fragment createFragment() {
        return PhotoPageFragment.newInstance(getIntent().getData());
    }

在这里插入图片描述
3.启动创建的activity(PhotoGalleryFragment.java)

 Intent i = PhotoPageActivity
                    .newIntent(getActivity(), mGalleryItem.getPhotoPageUri());

在这里插入图片描述
4.在配置文件中声明activity(AndroidManifest.xml)

 <activity
            android:name=".PhotoPageActivity"/>

在这里插入图片描述
5.加载URL(PhotoPageFragment.java)

        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl(mUri.toString());

在这里插入图片描述

四、使用WenChromeClient优化WebView显示

1.使用WenChromeClient(PhotoPageFragment.java)

private ProgressBar mProgressBar;
mProgressBar = (ProgressBar)v.findViewById(R.id.progress_bar);
        mProgressBar.setMax(100); // WebChromeClient reports in range 0-100
 mWebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView webView, int newProgress) {
                if (newProgress == 100) {
                    mProgressBar.setVisibility(View.GONE);
                } else {
                    mProgressBar.setVisibility(View.VISIBLE);
                    mProgressBar.setProgress(newProgress);
                }
            }

            public void onReceivedTitle(WebView webView, String title) {
                AppCompatActivity activity = (AppCompatActivity) getActivity();
                activity.getSupportActionBar().setSubtitle(title);
            }
        });

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、测试

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值