最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?WebView的使用與后退鍵處理詳細(xì)討論

 更新時(shí)間:2024年04月09日 09:36:32   作者:志尊寶  
在android開(kāi)發(fā)中我們有時(shí)候根據(jù)項(xiàng)目的需求多少會(huì)加載一些webview,加載webview,我們有時(shí)候會(huì)根據(jù)UI來(lái)自定義返回鍵,下面這篇文章主要給大家介紹了關(guān)于Android?WebView的使用與后退鍵處理的相關(guān)資料,需要的朋友可以參考下

前言

webView是Android中常用的組件之一,用于展示網(wǎng)頁(yè)內(nèi)容。它可以加載HTML文件、URL鏈接等網(wǎng)頁(yè)內(nèi)容,并提供交互功能。在使用webView時(shí),我們經(jīng)常會(huì)涉及到后退鍵處理,下面讓我們?cè)敿?xì)討論一下webView的使用和后退鍵處理。

首先,我們需要在布局文件中添加webView組件

<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>

在Activity中獲取webView實(shí)例,并加載網(wǎng)頁(yè)內(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”)方法。

當(dāng)webView加載網(wǎng)頁(yè)時(shí),我們可能需要處理一些事件,比如點(diǎn)擊鏈接時(shí)打開(kāi)新網(wǎng)頁(yè)、后退鍵按下時(shí)返回上一頁(yè)等。下面我們來(lái)詳細(xì)討論一下后退鍵處理。

首先,在Activity中重寫(xiě)onKeyDown()方法,用于監(jiān)聽(tīng)后退鍵的按下事件:

@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);
}

在上述代碼中,我們判斷了按下的鍵是否為后退鍵,并且事件的動(dòng)作是否為按下(ACTION_DOWN)。如果條件成立,則表示后退鍵被按下,我們可以在條件成立的地方添加我們的后退邏輯。

在webView中,我們可以使用goBack()方法來(lái)返回上一頁(yè)。所以,在后退鍵按下時(shí),我們可以調(diào)用webView的goBack()方法來(lái)實(shí)現(xiàn)返回上一頁(yè)的功能。具體代碼如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        if (webView.canGoBack()) {
            //如果webView可以返回上一頁(yè),則調(diào)用goBack()方法返回上一頁(yè)
            webView.goBack();
        } else {
            //否則,執(zhí)行其他邏輯(比如退出Activity)
            finish();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

在上述代碼中,我們添加了一個(gè)判斷語(yǔ)句,判斷webView是否可以返回上一頁(yè)。如果可以,則調(diào)用webView的goBack()方法返回上一頁(yè)。如果不可以,則執(zhí)行其他邏輯(比如退出Activity)。

另外,我們還可以通過(guò)監(jiān)聽(tīng)webView的歷史記錄來(lái)判斷是否可以返回上一頁(yè)。webView提供了一個(gè)WebViewClient類(lèi),該類(lèi)中有一個(gè)shouldOverrideUrlLoading()方法,可以用于監(jiān)聽(tīng)webView的url加載事件。我們可以通過(guò)重寫(xiě)該方法,并在方法中判斷webView的歷史記錄來(lái)判斷是否可以返回上一頁(yè)。具體代碼如下:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (webView.canGoBack()) {
            //如果webView可以返回上一頁(yè),則調(diào)用goBack()方法返回上一頁(yè)
            webView.goBack();
        } else {
            //否則,執(zhí)行其他邏輯(比如退出Activity)
            finish();
        }
        return true;
    }
});

在上述代碼中,我們通過(guò)webView的setWebViewClient()方法設(shè)置了一個(gè)新的WebViewClient實(shí)例,并重寫(xiě)了其shouldOverrideUrlLoading()方法。在方法中,我們判斷了webView是否可以返回上一頁(yè),如果可以,則調(diào)用goBack()方法返回上一頁(yè)。如果不可以,則執(zhí)行其他邏輯(比如退出Activity)。

除了上述的代碼實(shí)現(xiàn)方式,我們還可以通過(guò)webView的WebChromeClient類(lèi)來(lái)監(jiān)聽(tīng)后退鍵的按下事件。WebChromeClient類(lèi)有一個(gè)onKeyDown()方法,可以用于監(jiān)聽(tīng)鍵盤(pá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可以返回上一頁(yè),則調(diào)用goBack()方法返回上一頁(yè)
                webView.goBack();
            } else {
                //否則,執(zhí)行其他邏輯(比如退出Activity)
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
});

在上述代碼中,我們通過(guò)webView的setWebChromeClient()方法設(shè)置了一個(gè)新的WebChromeClient實(shí)例,并重寫(xiě)了其onKeyDown()方法。在方法中,我們判斷了按下的鍵是否為后退鍵,并且事件的動(dòng)作是否為按下(ACTION_DOWN)。如果條件成立,則表示后退鍵被按下,我們可以在條件成立的地方添加我們的后退邏輯。

以上就是webView的使用和后退鍵處理的詳細(xì)討論。對(duì)于webView的使用,我們可以通過(guò)loadUrl()方法加載網(wǎng)頁(yè)內(nèi)容,還可以監(jiān)聽(tīng)webView的各種事件來(lái)實(shí)現(xiàn)特定的功能。而對(duì)于后退鍵處理,我們可以重寫(xiě)Activity的onKeyDown()方法,通過(guò)判斷后退鍵的按下事件來(lái)實(shí)現(xiàn)返回上一頁(yè)的功能。同時(shí),我們還可以通過(guò)監(jiān)聽(tīng)webView的歷史記錄或使用WebChromeClient來(lái)實(shí)現(xiàn)后退鍵的處理。

附:Android 開(kāi)發(fā)之webview頁(yè)面返回到最頂關(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;
     // 手勢(shì)
     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, "沒(méi)有找到相關(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);
  // 滾動(dòng)條
  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) {
    // 下一個(gè)鏈接
    try {
     if(title.equals("個(gè)人中心")){
      url=nextUrl;
     }
    } catch (Exception e) {
    }
    view.loadUrl(nextUrl);
    return true;
   }
 
   // 開(kāi)始加載
   @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的滑動(dòng)事件交個(gè)手勢(shì)處理
  webView.setOnTouchListener(new OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    return mGestureDetector.onTouchEvent(event);
   }
  });
 }
 
 // 初始化手勢(shì)
 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android使用Scrolling機(jī)制實(shí)現(xiàn)Tab吸頂效果

    Android使用Scrolling機(jī)制實(shí)現(xiàn)Tab吸頂效果

    app 首頁(yè)中經(jīng)常要實(shí)現(xiàn)首頁(yè)頭卡共享,tab 吸頂,內(nèi)容區(qū)通過(guò) ViewPager 切換的需求,以前往往是利用事件處理來(lái)完成,但是這些也有一定的弊端和滑動(dòng)方面不如意的地方,本文我們利用NestedScrolling機(jī)制來(lái)實(shí)現(xiàn),感興趣的朋友可以參考下
    2024-01-01
  • RxJava加Retrofit文件分段上傳實(shí)現(xiàn)詳解

    RxJava加Retrofit文件分段上傳實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了RxJava加Retrofit文件分段上傳實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android中ContextMenu用法實(shí)例

    Android中ContextMenu用法實(shí)例

    這篇文章主要介紹了Android中ContextMenu用法,實(shí)例分析了Android上下文菜單ContextMenu的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • android中可以通過(guò)兩種方式調(diào)用接口發(fā)送短信

    android中可以通過(guò)兩種方式調(diào)用接口發(fā)送短信

    調(diào)用系統(tǒng)短信接口直接發(fā)送短信;調(diào)起系統(tǒng)發(fā)短信功能,本文將給出兩種方式的實(shí)現(xiàn)代碼,感興趣的朋友可以了解下,或許對(duì)你有所幫助
    2013-02-02
  • Android下使用TCPDUMP實(shí)現(xiàn)數(shù)據(jù)抓包教程

    Android下使用TCPDUMP實(shí)現(xiàn)數(shù)據(jù)抓包教程

    這篇文章主要介紹了Android下使用TCPDUMP實(shí)現(xiàn)數(shù)據(jù)抓包教程,本文講解使用抓包工具tcpdump抓取數(shù)據(jù),然后使用Wireshark來(lái)分析數(shù)據(jù),需要的朋友可以參考下
    2015-02-02
  • Android自定義柱狀圖表的方法實(shí)例

    Android自定義柱狀圖表的方法實(shí)例

    柱狀圖是我們?cè)谌粘i_(kāi)發(fā)中經(jīng)常會(huì)用到的一種圖表,下面這篇文章主要給大家介紹了關(guān)于Android如何自定義柱狀圖表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-05-05
  • Android開(kāi)發(fā)自定義控件之折線圖實(shí)現(xiàn)方法詳解

    Android開(kāi)發(fā)自定義控件之折線圖實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Android開(kāi)發(fā)自定義控件之折線圖實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Android自定義控件中折線圖原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Android入門(mén)之在子線程中調(diào)用Handler詳解

    Android入門(mén)之在子線程中調(diào)用Handler詳解

    這篇文章主要為大家詳細(xì)介紹了Android如何在子線程中調(diào)用Handler,文中的示例代碼講解詳細(xì),有需要的朋友可以借鑒參考下,希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2022-12-12
  • Android中模仿抖音加載框之兩顆小球轉(zhuǎn)動(dòng)效果

    Android中模仿抖音加載框之兩顆小球轉(zhuǎn)動(dòng)效果

    這篇文章主要介紹了Android仿抖音加載框之兩顆小球轉(zhuǎn)動(dòng)控件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Android獲取驗(yàn)證碼倒計(jì)時(shí)顯示效果

    Android獲取驗(yàn)證碼倒計(jì)時(shí)顯示效果

    這篇文章主要為大家詳細(xì)介紹了Android獲取驗(yàn)證碼顯示的兩種簡(jiǎn)單實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論

鄂州市| 天台县| 蓬安县| 镇远县| 封开县| 金沙县| 遂平县| 永宁县| 石泉县| 长汀县| 玉山县| 鄯善县| 海晏县| 温州市| 枣强县| 开鲁县| 锡林郭勒盟| 康保县| 山阳县| 丰顺县| 泾阳县| 礼泉县| 全椒县| 古田县| 平乡县| 沐川县| 黑河市| 桃园市| 右玉县| 高陵县| 阿勒泰市| 来宾市| 望奎县| 隆子县| 四会市| 定州市| 临颍县| 弥渡县| 新蔡县| 长顺县| 临沂市|