前言
大家好,我是做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"/>
总结
第一次分享的文章就到这啦,其中若是有什么问题错误,大家一定要多多指出,希望和大家共同学习,分享学习经验,共同进步成为大牛,哈哈哈!若用到了学到了可以给我点赞收藏关注我啦,给我一份动力哈。