Android?WebView的使用與后退鍵處理詳細討論
前言
webView是Android中常用的組件之一,用于展示網(wǎng)頁內(nèi)容。它可以加載HTML文件、URL鏈接等網(wǎng)頁內(nèi)容,并提供交互功能。在使用webView時,我們經(jīng)常會涉及到后退鍵處理,下面讓我們詳細討論一下webView的使用和后退鍵處理。
首先,我們需要在布局文件中添加webView組件
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
在Activity中獲取webView實例,并加載網(wǎng)頁內(nèi)容
:
WebView webView = findViewById(R.id.webView);
webView.loadUrl("http://www.example.com");
以上代碼中,我們獲取了布局文件中的webView組件,并使用loadUrl()方法加載了指定的URL鏈接。如果要加載本地的HTML文件,可以使用loadUrl(“file:///android_asset/your_file.html”)方法。
當webView加載網(wǎng)頁時,我們可能需要處理一些事件,比如點擊鏈接時打開新網(wǎng)頁、后退鍵按下時返回上一頁等。下面我們來詳細討論一下后退鍵處理。
首先,在Activity中重寫onKeyDown()方法,用于監(jiān)聽后退鍵的按下事件:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
//處理后退鍵事件
return true;
}
return super.onKeyDown(keyCode, event);
}
在上述代碼中,我們判斷了按下的鍵是否為后退鍵,并且事件的動作是否為按下(ACTION_DOWN)。如果條件成立,則表示后退鍵被按下,我們可以在條件成立的地方添加我們的后退邏輯。
在webView中,我們可以使用goBack()方法來返回上一頁。所以,在后退鍵按下時,我們可以調(diào)用webView的goBack()方法來實現(xiàn)返回上一頁的功能。具體代碼如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if (webView.canGoBack()) {
//如果webView可以返回上一頁,則調(diào)用goBack()方法返回上一頁
webView.goBack();
} else {
//否則,執(zhí)行其他邏輯(比如退出Activity)
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
在上述代碼中,我們添加了一個判斷語句,判斷webView是否可以返回上一頁。如果可以,則調(diào)用webView的goBack()方法返回上一頁。如果不可以,則執(zhí)行其他邏輯(比如退出Activity)。
另外,我們還可以通過監(jiān)聽webView的歷史記錄來判斷是否可以返回上一頁。webView提供了一個WebViewClient類,該類中有一個shouldOverrideUrlLoading()方法,可以用于監(jiān)聽webView的url加載事件。我們可以通過重寫該方法,并在方法中判斷webView的歷史記錄來判斷是否可以返回上一頁。具體代碼如下:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (webView.canGoBack()) {
//如果webView可以返回上一頁,則調(diào)用goBack()方法返回上一頁
webView.goBack();
} else {
//否則,執(zhí)行其他邏輯(比如退出Activity)
finish();
}
return true;
}
});
在上述代碼中,我們通過webView的setWebViewClient()方法設(shè)置了一個新的WebViewClient實例,并重寫了其shouldOverrideUrlLoading()方法。在方法中,我們判斷了webView是否可以返回上一頁,如果可以,則調(diào)用goBack()方法返回上一頁。如果不可以,則執(zhí)行其他邏輯(比如退出Activity)。
除了上述的代碼實現(xiàn)方式,我們還可以通過webView的WebChromeClient類來監(jiān)聽后退鍵的按下事件。WebChromeClient類有一個onKeyDown()方法,可以用于監(jiān)聽鍵盤按鍵的按下事件。具體代碼如下:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if (webView.canGoBack()) {
//如果webView可以返回上一頁,則調(diào)用goBack()方法返回上一頁
webView.goBack();
} else {
//否則,執(zhí)行其他邏輯(比如退出Activity)
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
});
在上述代碼中,我們通過webView的setWebChromeClient()方法設(shè)置了一個新的WebChromeClient實例,并重寫了其onKeyDown()方法。在方法中,我們判斷了按下的鍵是否為后退鍵,并且事件的動作是否為按下(ACTION_DOWN)。如果條件成立,則表示后退鍵被按下,我們可以在條件成立的地方添加我們的后退邏輯。
以上就是webView的使用和后退鍵處理的詳細討論。對于webView的使用,我們可以通過loadUrl()方法加載網(wǎng)頁內(nèi)容,還可以監(jiān)聽webView的各種事件來實現(xiàn)特定的功能。而對于后退鍵處理,我們可以重寫Activity的onKeyDown()方法,通過判斷后退鍵的按下事件來實現(xiàn)返回上一頁的功能。同時,我們還可以通過監(jiān)聽webView的歷史記錄或使用WebChromeClient來實現(xiàn)后退鍵的處理。
附:Android 開發(fā)之webview頁面返回到最頂關(guān)閉
public class MyWebViewActivity extends Activity {
private Context context = this;
// 底部菜單View
// public static View bottomView;
private WebViewProgressBar webView;
private String url;
private HtmlBean bean;
// 手勢
private GestureDetector mGestureDetector;
private TextView btn_goback;
String title;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.usershop_layout);
MyUtils.checkStrictMode(true);
url = getIntent().getStringExtra("url");
if (!TextUtils.isEmpty(title)) {
TextView tv_title = (TextView) findViewById(R.id.title_text);
if (title.length() > 6) {
title = title.substring(0, 6);
}
tv_title.setText(title);
}
if (TextUtils.isEmpty(url)) {
Toast.makeText(this, "沒有找到相關(guān)的鏈接地址", Toast.LENGTH_LONG).show();
return;
}
initWebView();
this.initJsInterface();
initGestureDetector();
}
// 初始化webView
private void initWebView() {
// 底部菜單
// bottomView = findViewById(R.id.user_bottom);
btn_goback=(TextView)findViewById(R.id.btn_goback);
// WebView
webView = (WebViewProgressBar) findViewById(R.id.user_webview);
// 滾動條
webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
// 腳本支持
webView.getSettings().setJavaScriptEnabled(true);
// 縮放
webView.getSettings().setSupportZoom(true);
webView.loadUrl(url);
// WebView客戶端
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String nextUrl) {
// 下一個鏈接
try {
if(title.equals("個人中心")){
url=nextUrl;
}
} catch (Exception e) {
}
view.loadUrl(nextUrl);
return true;
}
// 開始加載
@Override
public void onPageStarted(WebView view, String url2, Bitmap favicon) {
// TODO Auto-generated method stub
}
// 加載完畢
@Override
public void onPageFinished(WebView view, String url2) {
}
});
btn_goback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
// WebView的滑動事件交個手勢處理
webView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return mGestureDetector.onTouchEvent(event);
}
});
}
// 初始化手勢
private void initGestureDetector() {
mGestureDetector = new GestureDetector(this, new OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}, new Handler() {
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
ShareDao.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
public void btn_on(View view){
if(webView.canGoBack()){
webView.goBack(); // goBack()表示返回WebV
}else {
finish();
}
}
}
}總結(jié)
到此這篇關(guān)于Android WebView的使用與后退鍵處理的文章就介紹到這了,更多相關(guān)Android WebView使用與后退鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android使用Scrolling機制實現(xiàn)Tab吸頂效果
app 首頁中經(jīng)常要實現(xiàn)首頁頭卡共享,tab 吸頂,內(nèi)容區(qū)通過 ViewPager 切換的需求,以前往往是利用事件處理來完成,但是這些也有一定的弊端和滑動方面不如意的地方,本文我們利用NestedScrolling機制來實現(xiàn),感興趣的朋友可以參考下2024-01-01
RxJava加Retrofit文件分段上傳實現(xiàn)詳解
這篇文章主要為大家介紹了RxJava加Retrofit文件分段上傳實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
android中可以通過兩種方式調(diào)用接口發(fā)送短信
調(diào)用系統(tǒng)短信接口直接發(fā)送短信;調(diào)起系統(tǒng)發(fā)短信功能,本文將給出兩種方式的實現(xiàn)代碼,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02
Android下使用TCPDUMP實現(xiàn)數(shù)據(jù)抓包教程
這篇文章主要介紹了Android下使用TCPDUMP實現(xiàn)數(shù)據(jù)抓包教程,本文講解使用抓包工具tcpdump抓取數(shù)據(jù),然后使用Wireshark來分析數(shù)據(jù),需要的朋友可以參考下2015-02-02
Android開發(fā)自定義控件之折線圖實現(xiàn)方法詳解
這篇文章主要介紹了Android開發(fā)自定義控件之折線圖實現(xiàn)方法,結(jié)合實例形式詳細分析了Android自定義控件中折線圖原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-05-05
Android入門之在子線程中調(diào)用Handler詳解
這篇文章主要為大家詳細介紹了Android如何在子線程中調(diào)用Handler,文中的示例代碼講解詳細,有需要的朋友可以借鑒參考下,希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2022-12-12
Android中模仿抖音加載框之兩顆小球轉(zhuǎn)動效果
這篇文章主要介紹了Android仿抖音加載框之兩顆小球轉(zhuǎn)動控件,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09最新評論

