码迷,mamicode.com
首页 > Web开发 > 详细

一个简单的网页浏览器

时间:2014-12-31 10:08:11      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

自己写的,实现简单的网页浏览,就是不能实现观看视频全屏还不能下载,有History.

[1].[文件] History.java ~ 5KB    下载(42) 跳至 [1] [2] [3] [4] [5]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package com.rong05.webview;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
 
public class History extends Activity {
    ListView list;
    Button back,clear;
    private List<Map<String,String>> historyList = new ArrayList<Map<String,String>>();
    SimpleAdapter adapter;
    String wordsTitle[];
    String wordsHistory[];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.history);
        list=(ListView) findViewById(R.id.historylist);
        back=(Button) findViewById(R.id.back);
        clear=(Button) findViewById(R.id.clear);
        getHistory();
        getTitles();
        for(int i=0;i<wordsHistory.length&&i<wordsTitle.length;i++){
            Map<String,String> map=new HashMap<String, String>();
            map.put("title",wordsTitle[i]);
            map.put("history",wordsHistory[i]);
            historyList.add(map);
        }
        adapter=new SimpleAdapter(getApplicationContext(),historyList,R.layout.data_list,new String[]{"title","history"},new int[]{R.id.textView1,R.id.textView2});
        list.setAdapter(adapter);
        list.setOnItemClickListener(listlistener);
        back.setOnClickListener(backListener);
        clear.setOnClickListener(clearListener);
    }
    //读取history.txt中的历史信息
    void getHistory(){
        FileInputStream fis=null;
        try {
            fis=openFileInput("history.txt");  
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            byte[] bate=new byte[fis.available()];
            while(fis.read(bate)!=-1){
            }
            String str=new String(bate);
            wordsHistory=str.split(";");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //读取title.txt中的网页标题
    void getTitles(){
        FileInputStream fis=null;
        try {
            fis=openFileInput("title.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            byte[] bate=new byte[fis.available()];
            while(fis.read(bate)!=-1){
            }
            String str=new String(bate);
            wordsTitle=str.split(";");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //实现ListView的事件
    OnItemClickListener listlistener=new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            //将信息返回到mainActivity中
            History.this.getIntent().putExtra("retmsg",historyList.get(arg2).get("history"));
            History.this.setResult(RESULT_OK,History.this.getIntent());
            History.this.finish();
        }
    };
    //对返回按键的监听
    OnClickListener backListener=new OnClickListener() {
         
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            History.this.setResult(RESULT_CANCELED, getIntent());
            //停止当前页面
            History.this.finish();
        }
    };
    //对清除历史记录按键的监听
    OnClickListener clearListener=new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            deleteHistory();
            deleteTitle();
            //让ListView清空
            list.removeAllViewsInLayout();
        }
    };
    //删除history.txt的内容
    void deleteHistory(){
        FileOutputStream fos=null;
        try {
            fos=openFileOutput("history.txt",MODE_PRIVATE);
            try {
                fos.write("".getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fos.flush();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //删除title.txt的内容
    void deleteTitle(){
        FileOutputStream fos=null;
        try {
            fos=openFileOutput("title.txt",MODE_PRIVATE);
            try {
                fos.write("".getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fos.flush();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

[2].[文件] WebMainActivity.java ~ 8KB    下载(23) 跳至 [1] [2] [3] [4] [5]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
package com.rong05.webview;
 
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
 
public class WebMainActivity extends Activity {
 
    Button go,next,last,history;
    EditText input;
    WebView web;
    ProgressBar progress;
    static double beforeLenght=0,changeLenght=0;
    static String FILE_NAME="history.txt";
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_main);
        findView();
        web.loadUrl("http://baidu.com");
        web.setWebViewClient(client);
        WebSettings setter=web.getSettings();
        //实现JavaScrip
        setter.setJavaScriptEnabled(true);
        //实现网页的缩放
        setter.setBuiltInZoomControls(true);
        setter.setJavaScriptCanOpenWindowsAutomatically(true);
        setter.setGeolocationEnabled(true);
        web.setWebChromeClient(chromeClient);
        go.setOnClickListener(new Action());
        next.setOnClickListener(new Action());
        last.setOnClickListener(new Action());
        history.setOnClickListener(new Action());
        if(WebMainActivity.changeLenght>WebMainActivity.beforeLenght)
            web.zoomIn();
        else
            if(WebMainActivity.changeLenght<WebMainActivity.beforeLenght)
                web.zoomOut();
    }
    /**
     * 对WebView的实现其中的方法
     * */
     WebViewClient client=new WebViewClient(){
 
         //该方法是让网页在WebView中显示不调用本地浏览器
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                return super.shouldOverrideUrlLoading(view, url);
            }
        //对历史记录的刷新
        @Override
        public void doUpdateVisitedHistory(WebView view, String url,
                boolean isReload) {
            // TODO Auto-generated method stub
             last.setEnabled(web.canGoBack()); 
              next.setEnabled(web.canGoForward());
            super.doUpdateVisitedHistory(view, url, isReload);
        }
        //在读完网页后对其进行的操作
        @Override
        public void onPageFinished(WebView view, String url) { 
            //设置程序的标题为网页的标题 
                    if (web.getTitle() != null) { 
                        WebMainActivity.this.setTitle(web.getTitle()); 
                        getTitles(web.getTitle());
                        getHistory(url);
                    }
                }
        //在开始读取网页时对其进行的操作
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            WebMainActivity.this.setTitle("Loading..."); 
            last.setEnabled(web.canGoBack()); 
            next.setEnabled(web.canGoForward()); 
            super.onPageStarted(view, url, favicon);
        }     
    };
    /**
     * 对WebView的实现其中 WebChromeClient的方法
     */
    WebChromeClient chromeClient=new WebChromeClient(){
        //实现进度条
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            // TODO Auto-generated method stub
            super.onProgressChanged(view, newProgress);
            progress.setProgress(newProgress);
        }
        //对历史记录的刷新
        @Override
        public void getVisitedHistory(ValueCallback<String[]> callback) {
            // TODO Auto-generated method stub
            super.getVisitedHistory(callback);
        }
    };
    //实现Button的按钮的动作
    public class Action implements OnClickListener{
 
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.go:
                WebMainActivity.this.web.loadUrl(WebMainActivity.this.input.getText().toString().trim());
                WebMainActivity.this.input.setText("http://");
                break;
            case R.id.last:
                if(WebMainActivity.this.web.canGoBack())
                    WebMainActivity.this.web.goBack();
                else
                    v.setClickable(false);
                break;
            case R.id.next:
                if(WebMainActivity.this.web.canGoForward())
                    WebMainActivity.this.web.goForward();
                else
                    v.setClickable(false);
                break;
            case R.id.history:
                //跳转到History页面
                Intent intent=new Intent(getApplicationContext(),History.class);
                WebMainActivity.this.startActivityForResult(intent, 1);
                break;
            default:
                break;
            }
        }
    }
    /**
     * 实现触摸事件
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        if(event.getHistorySize()==2)
            switch(event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    WebMainActivity.beforeLenght=Spacing(event);
                case MotionEvent.ACTION_UP:
                    WebMainActivity.changeLenght=Spacing(event);
                default:
                    break;
                 
            }
        return super.onTouchEvent(event);
    }
    /**
     * 计算两指的距离
     * @param event
     * @return
     */
    private float Spacing(MotionEvent event) {
          float x = event.getX(0) - event.getX(1);
          float y = event.getY(0) - event.getY(1);
          return FloatMath.sqrt(x * x + y * y);
    }
    //findViewById实现布局中的控件
    public void findView(){
        go=(Button)findViewById(R.id.go);
        next=(Button)findViewById(R.id.next);
        last=(Button)findViewById(R.id.last);
        history=(Button)findViewById(R.id.history);
        input=(EditText)findViewById(R.id.inputText);
        web=(WebView)findViewById(R.id.web);
        progress=(ProgressBar)findViewById(R.id.progress);
    }
    //得到历史信息写入history.txt
    public void getHistory(String  url){
        FileOutputStream fos = null;
        try {
            fos=openFileOutput(FILE_NAME, MODE_APPEND);
            try {
                fos.write((url+";").getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            if(fos!=null){
                try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    //得到网页的标题写入title.txt
    public void getTitles(String  url){
        FileOutputStream fos = null;
        try {
            fos=openFileOutput("title.txt", MODE_APPEND);
            try {
                fos.write((url+";").getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            if(fos!=null){
                try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * 对History的Activity的返回信息进行操作
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        switch(resultCode){
        case RESULT_OK:
            web.loadUrl(data.getStringExtra("retmsg"));
            break;
        case RESULT_CANCELED:
            break;
        default:
            break;
        }
    }
    //对返回键的重写
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if(web.canGoBack()){
                web.goBack();
                return true;
            }
            else{
                System.exit(0);
            }
             
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        web.pauseTimers();
        if(isFinishing()){
            web.loadUrl("about:blank");
            setContentView(new FrameLayout(this));
        }
        super.onPause();
    }
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        web.resumeTimers();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.web_main, menu);
        return true;
    }
}

[3].[文件] activity_web_main.xml ~ 2KB    下载(21) 跳至 [1] [2] [3] [4] [5]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:ignore="WebViewLayout,TextFields,HardcodedText,InefficientWeight,ButtonStyle" >
 
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
 
        <Button
            android:id="@+id/go"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/go" />
        <EditText
            android:id="@+id/inputText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="http://"/>
 
    </LinearLayout>
 
    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" >
        <WebView
            android:id="@+id/web"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </FrameLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal"
        >
 
        <Button
            android:id="@+id/last"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/last" />
 
        <Button
            android:id="@+id/next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/next" />
 
        <Button
            android:id="@+id/history"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/history" />
 
    </LinearLayout>
 
</LinearLayout>

[4].[文件] data_list.xml ~ 681B    下载(23) 跳至 [1] [2] [3] [4] [5]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="15pt"
        android:text="TextView" />
 
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="5pt"
        android:text="TextView" />
 
</LinearLayout>

[5].[文件] history.xml ~ 1KB    下载(25) 跳至 [1] [2] [3] [4] [5]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:ignore="ButtonStyle,InefficientWeight" >
 
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
 
        <ListView
            android:id="@+id/historylist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            >
        </ListView>
    </FrameLayout>
 
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >
 
        <Button
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/back" />
 
        <Button
            android:id="@+id/clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/clear" />
    </LinearLayout>
 
</LinearLayout>

一个简单的网页浏览器

标签:

原文地址:http://blog.csdn.net/u014311051/article/details/42283121

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!