Android 自制瀏覽器 一 能夠跳轉鏈接並返回
阿新 • • 發佈:2018-01-31
ise 基本數據 mis schema ces 一個 return size ould 我們首先將自制的瀏覽器做到以下功能:
點擊鏈接能夠跳轉網頁;
能夠返回原來的網頁;
能夠判斷是否這是最先瀏覽的網頁,如果按兩次back鍵就退出。
通過輸入框輸入網址,能夠訪問對應的網頁。
我們先對局部代碼講解,我會在最後公布完整代碼
首先加載網頁JavaScript必須能夠支持
點擊鏈接能夠跳轉網頁;
能夠返回原來的網頁;
能夠判斷是否這是最先瀏覽的網頁,如果按兩次back鍵就退出。
通過輸入框輸入網址,能夠訪問對應的網頁。
我們先對局部代碼講解,我會在最後公布完整代碼
首先加載網頁JavaScript必須能夠支持
WebSettings ws = web.getSettings();
//是否允許腳本支持
ws.setJavaScriptEnabled(true);
然後我們必須對WebView添加WebViewClient,只有這樣加載網頁時使用的是我們自己做的WebVIew,記得view.loadUrl(url);這代碼必須要,這是我們點擊鏈接跳轉網頁的代碼
web.setWebViewClient(wvc);
WebViewClient wvc = new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
et_url.setText(url);
return false;
};
};
還有這函數,它是為了防止輸入框輸入的網址不完整導致無法加載網頁
private void conn(String urlStr){ String url = ""; if(urlStr.contains("http://")){ url = urlStr; }else{ url = "http://"+urlStr; } web.loadUrl(url); }
還有就是back鍵按下兩次退出,其實這個有問題,如果我們跳轉了一次網頁,然後按下back鍵回到了初始網頁,然後再按下一次back鍵就會退出,這個我做的不好,這個可以通過記錄按下back鍵的兩次時間,如果時間過短就可以退出,這樣就行了。
我這裏是為了顯示web.canGoBack()和web.goBack()的功能,這兩個函數第一個能夠判斷是否有返回的網頁,第二個是返回上一個網頁。
public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK||web.canGoBack()){ web.goBack(); if(!web.canGoBack()){ if(isExit){ return super.onKeyDown(keyCode, event); } isExit = true; Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show(); }else{ isExit = false; } } return true; }
好了講完了,我們上完整代碼
public class MainActivity extends Activity implements View.OnClickListener {
private EditText et_url;
private Button btn_visit;
private WebView web;
private boolean isExit;
private String homeStr = "http://www.baidu.com";
//-------------------------------------------
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
init();
}
//-------------------------------------------
/**
* 基本數據初始化
*/
private void init(){
isExit = false;
et_url = (EditText)findViewById(R.id.et_url);
et_url.setText(homeStr);
btn_visit = (Button)findViewById(R.id.btn_visit);
web = (WebView)findViewById(R.id.web);
WebSettings ws = web.getSettings();
//是否允許腳本支持
ws.setJavaScriptEnabled(true);
web.setWebViewClient(wvc);
btn_visit.setOnClickListener(this);
conn(et_url.getText().toString());
}
//-------------------------------------------
WebViewClient wvc = new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
et_url.setText(url);
return false;
};
};
//-------------------------------------------
/**
* 訪問url
* @param urlStr
*/
private void conn(String urlStr){
String url = "";
if(urlStr.contains("http://")){
url = urlStr;
}else{
url = "http://"+urlStr;
}
web.loadUrl(url);
}
//-------------------------------------------
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK||web.canGoBack()){
web.goBack();
if(!web.canGoBack()){
if(isExit){
return super.onKeyDown(keyCode, event);
}
isExit = true;
Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
}else{
isExit = false;
}
}
return true;
}
//-------------------------------------------
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_visit:
conn(et_url.getText().toString());
break;
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ScrollView
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/layout"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<EditText
android:id="@+id/et_url"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textUri"
android:singleLine="true"
android:layout_margin="10dp"/>
<Button
android:id="@+id/btn_visit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="visit"
android:textSize="15dp" />
</LinearLayout>
<WebView
android:id="@+id/web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
<uses-permission android:name="android.permission.INTERNET"/>
再見
Android 自制瀏覽器 一 能夠跳轉鏈接並返回