前言

大家好,我是做Android软件开发的小程序员,刚工作没多久,第一次发表文章,若文章有什么问题或错误,请大家多多指教,共同学习。我分享的内容是关于Android开发中对于多个按钮携带的网页链接跳转到一个页面(即自定义的页面),而不是跳转到浏览器的问题解决方案。适合刚入行的小白程序员,高深的咱现在还不会啊。

Java代码

MainActivity类(一个页面携带多个网址的按钮从这里开始跳转)的代码如下:

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    private ImageButton ib_baidu,ib_it,ib_csdn,ib_zhihu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//使内容全屏显示

        ib_baidu = findViewById(R.id.ib_baidu);
        ib_it = findViewById(R.id.ib_it);
        ib_csdn = findViewById(R.id.ib_csdn);
        ib_zhihu = findViewById(R.id.ib_zhihu);

        ib_baidu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,Webpage.class);
                intent.putExtra("BAIDU","https://www.baidu.com/");//携带网址随着按钮发送到指定页面
                startActivity(intent);
            }
        });
        ib_it.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,Webpage.class);
                intent.putExtra("IT","https://www.ithome.com/");//第一个参数相当于ID,第二个参数是网址,去掉双引号也可以填写其他的比如数值,可以网上查查。
                startActivity(intent);
            }
        });
        ib_csdn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        });
        ib_zhihu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,Webpage.class);
                intent.putExtra("ZHIHU","https://www.zhihu.com/");
                startActivity(intent);
            }
        });
    }
}

webpage类(另一个页面即自定义的浏览网页的界面)代码如下:

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;

public class Webpage extends AppCompatActivity {

    private WebView wv_webview;
    private ImageButton ib_retreat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webpage);

        wv_webview = findViewById(R.id.wv_webview);
        ib_retreat = findViewById(R.id.ib_retreat);

        wv_webview.getSettings().setJavaScriptEnabled(true);//设置webview属性,能够执行JavaScript脚本
        wv_webview.getSettings().setSupportZoom(true);//设置可以支持缩放
        wv_webview.getSettings().setUseWideViewPort(true);扩大比例的缩放
        WebSettings webSettings = wv_webview.getSettings();
        webSettings.setAllowFileAccess(true);//在WebView中启用或禁用文件访问
        webSettings.setBuiltInZoomControls(true);//设置出现缩放工具
        //自适应屏幕
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webSettings.setLoadWithOverviewMode(true);

        //如果不设置WebViewClient,请求会跳转系统浏览器
        wv_webview.setWebViewClient(new WebViewClient(){
        /**
        *下面两个方法是一样的效果根据自己的需求选择,我试了两个都写上也可以没有影响
        **/
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //该方法在Build.VERSION_CODES.LOLLIPOP以前有效,从Build.VERSION_CODES.LOLLIPOP起,建议使用shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下,我想让webView加载

                return false;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下,我想让webView加载

                return false;
            }
        });

        Intent intent = getIntent();
        String baidu = intent.getStringExtra("BAIDU");//读取上个页面传来的参数
        wv_webview.loadUrl(baidu);//调用参数(这里是网址即打开网址)
        String it = intent.getStringExtra("IT");

        ib_retreat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();//后退一步
            }
        });
    }
}

XML代码

MainActivity类的xml页面布局的代码如下:

<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"
    android:id="@+id/actiity_main"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="百度一下"
            android:textSize="28sp"
            android:textColor="#000"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="50dp"/>
        <ImageButton
            android:id="@+id/ib_baidu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/home_fill1"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="IT之家"
            android:textSize="28sp"
            android:textColor="#000"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="50dp"/>
        <ImageButton
            android:id="@+id/ib_it"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/home_fill1"
            android:layout_marginLeft="32dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="50dp"/>
        <ImageButton
            android:id="@+id/ib_csdn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/home_fill1"
            android:layout_marginLeft="40dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="知乎"
            android:textSize="28sp"
            android:textColor="#000"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="50dp"/>

        <ImageButton
            android:id="@+id/ib_zhihu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="58dp"
            android:src="@drawable/home_fill1" />
    </LinearLayout>
    
</LinearLayout>

Webpage类的xml页面布局的代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/wv_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </WebView>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:background="#f7f7f7">
        <ImageButton
            android:id="@+id/ib_retreat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/close"/>
    </RelativeLayout>
</RelativeLayout>

AndroidManifest里的小布置

<uses-permission android:name="android.permission.INTERNET" />//网络权限

<application
		...
        android:usesCleartextTraffic="true">//是否打算使用明文网络流量,例如明文HTTP,自定义浏览网页需要这个

		<activity
            android:name=".MainActivity"
            android:screenOrientation="landscape"> //设置页面为横屏显示 
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        ...
</application>

各种权限请求

我现在知道的就这么多啦,其他的网上找找吧

<!--允许联网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息,获取运营商信息,用于支持提供运营商信息相关的接口  -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--获取wifi网络状态的信息,这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--获取sd卡写的权限,用于文件上传和下载-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允许读取手机状态 用于创建BmobInstallation-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 获得读取的权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 获得写入的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" />

    <!-- Android O之后开启前台服务需要申请该权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- Android Q之后,后台定位需要申请该权限 -->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

    <!-- 以下不是鹰眼SDK需要的基础权限,可选 -->

    <!-- 用于加快GPS首次定位,可选权限,非必须-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <!-- 用于Android M及以上系统,申请加入忽略电池优化白名单,可选权限,非必须-->
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

总结

第一次分享的文章就到这啦,其中若是有什么问题错误,大家一定要多多指出,希望和大家共同学习,分享学习经验,共同进步成为大牛,哈哈哈!若用到了学到了可以给我点赞收藏关注我啦,给我一份动力哈。