Android网络:开发浏览器(六)——功能完善之查看图片属性

    UC中的图片查看属性就是列出图片所属网站的标题、URL、页面大小、页面编码以及图片的URL地址。并且,可将图片的URL和页面的URL地址复制到系统的剪贴板中。

   

    这样的话其实很容易实现,现在首先进行页面的布局编写:

   

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#F1F1F2"

    android:orientation="vertical">

 

    <FrameLayout

       android:id="@+id/activity_pageattr_pageName"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:background="@android:color/holo_blue_light">

 

        <TextView

           android:id="@+id/activity_pageattr_pageName_text"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:layout_margin="5dp"

           android:text="@string/pageAttr"

           android:textColor="@android:color/white"/>

    </FrameLayout>

 

    <ScrollView

       android:id="@+id/ScrollView"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent">

 

        <LinearLayout

           android:id="@+id/activity_pageattr_content"

           android:layout_width="match_parent"

           android:layout_height="wrap_content"

           android:orientation="vertical">

 

            <LinearLayout

                android:id="@+id/activity_pageattr_title"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_margin="5dp"

                android:background="@drawable/attr_back"

                android:orientation="horizontal">

 

                <TextView

                    android:id="@+id/activity_pageattr_title_key"

                    android:layout_width="0dp"

                    android:layout_height="wrap_content"

                    android:layout_marginBottom="10dp"

                    android:layout_marginLeft="15dp"

                    android:layout_marginTop="10dp"

                    android:layout_weight="0.3"

                    android:text="@string/webPageTitle"

                    android:textSize="16sp"/>

 

                <TextView

                    android:id="@+id/activity_pageattr_title_value"

                    android:layout_width="0dp"

                    android:layout_height="wrap_content"

                    android:layout_marginBottom="10dp"

                    android:layout_marginRight="15dp"

                    android:layout_marginTop="10dp"

                    android:layout_weight="0.7"

                    android:textSize="16sp"/>

            </LinearLayout>

 

            <RelativeLayout

                android:id="@+id/activity_pageattr_resultShowURL"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_margin="5dp"

                android:background="@drawable/attr_back"

                android:visibility="gone">

 

                <TextView

                    android:id="@+id/activity_pageattr_resultShowURL_key"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_marginBottom="5dp"

                    android:layout_marginLeft="15dp"

                    android:layout_marginTop="10dp"

                    android:textSize="16sp"/>

 

                <Button

                    android:id="@+id/activity_pageattr_resultShowURL_copy"

                    android:layout_width="50dp"

                    android:layout_height="35dp"

                    android:layout_above="@+id/secondhr"

                    android:layout_alignParentRight="true"

                    android:layout_marginBottom="1.5dp"

                    android:layout_marginRight="10dp"

                    android:layout_marginTop="5dp"

                    android:background="@drawable/button"

                    android:text="@string/copy"

                    android:textColor="#777D82"

                    android:textSize="14sp"/>

 

                <View

                    android:id="@+id/secondhr"

                    android:layout_width="match_parent"

                    android:layout_height="0.5dp"

                    android:layout_below="@id/activity_pageattr_resultShowURL_key"

                    android:layout_margin="5dp"

                    android:background="#C4C4C4"/>

 

                <TextView

                    android:id="@+id/activity_pageattr_resultShowURL_value"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_below="@id/secondhr"

                    android:layout_marginBottom="10dp"

                    android:layout_marginLeft="15dp"

                    android:textSize="16sp"/>

 

                <View

                    android:id="@+id/kuozhan"

                    android:layout_width="match_parent"

                    android:layout_height="0.1dp"

                    android:layout_below="@id/activity_pageattr_resultShowURL_value"

                    android:layout_marginTop="5dp"/>

            </RelativeLayout>

 

            <RelativeLayout

               android:id="@+id/activity_pageattr_currentPageUrl"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_margin="5dp"

                android:background="@drawable/attr_back">

 

                <TextView

                    android:id="@+id/activity_pageattr_currentPageUrl_key"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_marginBottom="5dp"

                    android:layout_marginLeft="15dp"

                    android:layout_marginTop="10dp"

                    android:text="@string/currentPageUrl"

                    android:textSize="16sp"/>

 

                <Button

                    android:id="@+id/activity_pageattr_currentPageUrl_copy"

                    android:layout_width="50dp"

                    android:layout_height="35dp"

                    android:layout_above="@+id/hr"

                    android:layout_alignParentRight="true"

                    android:layout_marginBottom="1.5dp"

                    android:layout_marginRight="10dp"

                    android:layout_marginTop="5dp"

                    android:background="@drawable/button"

                    android:text="@string/copy"

                    android:textColor="#777D82"

                    android:textSize="14sp"/>

 

                <View

                    android:id="@+id/hr"

                    android:layout_width="match_parent"

                    android:layout_height="0.5dp"

                    android:layout_below="@id/activity_pageattr_currentPageUrl_key"

                    android:layout_margin="5dp"

                    android:background="#C4C4C4"/>

 

                <TextView

                    android:id="@+id/activity_pageattr_currentPageUrl_value"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_below="@id/hr"

                    android:layout_marginBottom="10dp"

                    android:layout_marginLeft="15dp"

                    android:textSize="16sp"/>

 

                <View

                    android:id="@+id/secondkuozhan"

                    android:layout_width="match_parent"

                    android:layout_height="0.1dp"

                    android:layout_below="@id/activity_pageattr_currentPageUrl_value"

                    android:layout_marginTop="5dp"/>

            </RelativeLayout>

 

            <LinearLayout

                android:id="@+id/activity_pageattr_pageOtherAttr"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_margin="5dp"

                android:background="@drawable/attr_back"

                android:orientation="vertical">

 

                <LinearLayout

                    android:id="@+id/activity_pageattr_pageOtherAttr_size"

                    android:layout_width="fill_parent"

                    android:layout_height="wrap_content"

                    android:layout_marginLeft="15dp"

                    android:layout_marginTop="10dp"

                    android:orientation="horizontal">

 

                    <TextView

                        android:id="@+id/activity_pageattr_pageOtherAttr_size_key"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:text="@string/pageSize"

                        android:textSize="16sp"/>

 

                    <TextView

                        android:id="@+id/activity_pageattr_pageOtherAttr_size_value"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:textSize="16sp"/>

                </LinearLayout>

 

                <LinearLayout

                    android:id="@+id/activity_pageattr_pageOtherAttr_currentPageEncoding"

                    android:layout_width="fill_parent"

                    android:layout_height="wrap_content"

                    android:layout_marginBottom="10dp"

                    android:layout_marginLeft="15dp"

                    android:layout_marginTop="10dp"

                    android:orientation="horizontal">

 

                    <TextView

                        android:id="@+id/activity_pageattr_pageOtherAttr_currentPageEncoding_key"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:text="@string/currentPageEncoding"

                        android:textSize="16sp"/>

 

                    <TextView

                        android:id="@+id/activity_pageattr_pageOtherAttr_currentPageEncoding_value"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:textSize="16sp"/>

                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

    </ScrollView>

 

</LinearLayout>

代码片段10.2.42 页面属性布局

    第一个FrameLayout的布局是为了显示一个标题,之后的ScrollView布局则是为了能够完全显示,才加上这么个滚动条视图。

    这里尤其需要注意的是:滚动条视图只能添加唯一View,所以为了正常显示,我将所有的属性条都添加到了一个LinearLayout的垂直布局当中

   

    这里有一些额外的drawable

<?xmlversion="1.0"encoding="utf-8"?>

<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

 

    <item>

        <shapeandroid:shape="rectangle">

            <stroke

                android:width="1dp"

                android:color="#D1D1D2"/>

 

            <cornersandroid:radius="5dp"/>

        </shape>

    </item>

    <item

        android:left="1dp"

       android:top="1dp"

       android:right="1dp"

       android:bottom="1dp"

       >

        <shapeandroid:shape="rectangle">

            <solidandroid:color="#FFFFFF"/>

 

            <cornersandroid:radius="5dp"/>

        </shape>

    </item>

 

</layer-list>

代码片段10.2.43 属性条背景drawable

   

    这里我用了内框和外边框,并且用了圆角,一次来展示属性条的背景。

<?xmlversion="1.0"encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android">

    <itemandroid:state_pressed="true"android:drawable="@drawable/button_pressed"></item>

    <itemandroid:drawable="@drawable/button_normal"></item>

</selector>

代码片段10.2.44 button背景drawable

   

<?xmlversion="1.0"encoding="utf-8"?>

<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

 

    <item>

        <shapeandroid:shape="rectangle">

            <stroke

                android:width="1dp"

                android:color="#D1D1D2"/>

 

            <cornersandroid:radius="2dp"/>

        </shape>

    </item>

    <item

       android:left="1dp"

       android:top="1dp"

       android:right="1dp"

       android:bottom="1dp"

       >

        <shapeandroid:shape="rectangle">

            <solidandroid:color="#FFFFFF"/>

        

            <cornersandroid:radius="2dp"/>

           

            <gradient

                android:endColor="#D4EAFE"

                android:startColor="#FFFFFF"

                android:angle="90"

                />

        </shape>

    </item>

 

</layer-list>

代码片段10.2.45 button被按下时候的drawable

   

<?xmlversion="1.0"encoding="utf-8"?>

<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

 

    <item>

        <shapeandroid:shape="rectangle">

            <stroke

                android:width="1dp"

                android:color="#D1D1D2"/>

 

            <cornersandroid:radius="2dp"/>

        </shape>

    </item>

    <item

       android:left="1dp"

       android:top="1dp"

       android:right="1dp"

       android:bottom="1dp"

       >

        <shapeandroid:shape="rectangle">

            <solidandroid:color="#FFFFFF"/>

        

            <cornersandroid:radius="2dp"/>

           

            <gradient

                android:startColor="#EDF1F5"

                android:endColor="#FFFFFF"

                android:angle="90"

                />

        </shape>

    </item>

 

</layer-list>

代码片段10.2.46button的平常显示的drawable

   

    上述是button的图案样式构建,通过selector以不同的状态显示不同的形状。

        我们可以来看看预览图。

图10.2.18   页面属性xml布局的预览

   

    基本的显示已经完成,现在就是功能实现。

   

package com.example.androidstudy_web;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.webkit.WebView;

import android.widget.RelativeLayout;

import android.widget.TextView;

 

public class PageAttributesActivity extends Activity {

 

   // 网站标题

   private TextViewwebPageTitle;

   // 网页URL

   private TextViewcurrentPageUrl;

   // 网页大小

   private TextViewwebPageSize;

   // 网页编码

   private TextViewwebPageEncoding;

 

   // 特殊区域显示

   private RelativeLayoutchoosedURLLayout;

 

   // 网页信息

   private Stringtitle;

   private Stringurl;

   private Stringsize;

   private Stringencoding;

 

   // 属性类型

   private int type;

 

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_pageattr);

 

      // 接受参数

      /**

       * 初始化网页信息

       *

       * <hr/>

       * @param title   标题

       * @param url      url地址

       * @param size    网页大小

       * @param encoding编码

       * @param type    类型

       * */

      Bundle bundle = getIntent().getExtras();

      this.title = bundle.getString("title");

      this.url = bundle.getString("url");

      this.size = bundle.getString("size");

      this.encoding = bundle.getString("encoding");

      this.type = bundle.getInt("type");

 

      // 初始化组件

      this.init(bundle);

   }

 

   private void init(Bundle bundle) {

      this.webPageTitle = (TextView)this

            .findViewById(R.id.activity_pageattr_title_value);

      this.currentPageUrl = (TextView)this

            .findViewById(R.id.activity_pageattr_currentPageUrl_value);

      this.webPageSize = (TextView)this

            .findViewById(R.id.activity_pageattr_pageOtherAttr_size_value);

      this.webPageEncoding = (TextView)this

         .findViewById(R.id.activity_pageattr_pageOtherAttr_currentPageEncoding_value);

 

      // 设置

      this.webPageTitle.setText(this.title);

      this.currentPageUrl.setText(this.url);

      this.webPageSize.setText(this.size);

      this.webPageEncoding.setText(this.encoding);

 

      // 特殊情况判断

      if (this.type != WebView.HitTestResult.UNKNOWN_TYPE) {

         // 不为未知类型

         this.choosedURLLayout = (RelativeLayout)this

                .findViewById(R.id.activity_pageattr_resultShowURL);

         this.choosedURLLayout.setVisibility(View.VISIBLE);

 

         // 设置值

         if((this.type==WebView.HitTestResult.IMAGE_TYPE) || (this.type==WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE)){

            ((TextView) this.choosedURLLayout

                   .findViewById(R.id.activity_pageattr_resultShowURL_key))

                   .setText(getResources().getString(R.string.choosedPictureURL));

         }else if(this.type==WebView.HitTestResult.SRC_ANCHOR_TYPE){

            ((TextView) this.choosedURLLayout

                   .findViewById(R.id.activity_pageattr_resultShowURL_key))

                   .setText(getResources().getString(R.string.choosedLinkedURL));

         }

         ((TextView) this.choosedURLLayout

                .findViewById(R.id.activity_pageattr_resultShowURL_value))

                .setText(bundle.getString("typeUrl"));

      }

   }

 

}

代码片段10.2.47 页面属性的实现

   

    因为对于不同的点击类型来说,显示的是不同的,查看空白区域的属性,则只是当前页面的信息,而查看图片或是超链接则还要加上一个被选择图片链接URL或者被选择链接URL的属性条。

    因此,在设置完成基本属性后,则是要判断当前的类型type

    注意:因为没有进行缓存功能的缘故,无法查看当前页面的大小和当前页面的编码,所以我在这里并不进行页面大小和页面编码的设置。

   

    现在我们可以来实现主菜单中的点击查看图片属性的事件了

   

else if(v.getId()==R.id.item_longclicked_viewImageAttributes){

            //图片菜单-查看属性

            Intent intent = new Intent(MainActivity.this,PageAttributesActivity.class);

            Bundle bundle = new Bundle();

            bundle.putInt("type",type);

            bundle.putString("typeUrl",value);

            bundle.putString("title",title);

            bundle.putString("url",url);

            bundle.putString("size",size);

            bundle.putString("encoding",encoding);

            intent.putExtras(bundle);

            startActivity(intent);

         }

代码片段10.2.48 查看图片属性传参

   

    基本功能完成,接下来就是复制URL的地址。

   

/**

    * OnClickListener自定义继承类

    * 覆盖如下方法

    * 1. onClick

    * */

   private class ButtonOnClick implements OnClickListener{

      ClipboardManager clipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

      private StringtypeUrl;

     

      public ButtonOnClick(String typeUrl){

         this.typeUrl = typeUrl;

      }

     

      @Override

      public void onClick(View v) {

         if(v.getId()==R.id.activity_pageattr_currentPageUrl_copy){

            //当前页面URL的复制

            clipboardManager.setText(typeUrl);

            Log.d("clip",clipboardManager.getText().toString());

         }else if(v.getId()==R.id.activity_pageattr_resultShowURL_copy){

            //选中属性URL的复制

            clipboardManager.setText(typeUrl);

            Log.d("clip",clipboardManager.getText().toString());

         }

      }

 

   }

代码片段10.2.49 复制的操作

   

    一旦完成监听器,只需要传入需要被复制的值即可。

 

    我们可以看下效果图:

   

图10.2.19   实际效果图

   

    当我们进行粘贴的时候,后台的信息如下:

   

图10.2.20   复制的时候的Log信息

    

案例

    AndroidStudy_web_V3.2_by 本人dddd牛仔


声明:转载请注明出处


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值