android webview 禁止放大缩小,在Android WebView中启用/禁用缩放-程序员宅基地

技术标签: android webview 禁止放大缩小  

在为客户开发Android应用程序时,我们遇到了同样的问题,我设法绕过了这一限制。

我查看了WebView类的Android源代码,发现了updateZoomButtonsEnabled()-method与ZoomButtonsController-object一起使用,以根据浏览器的当前比例来启用和禁用缩放控件。

我搜索了一种返回ZoomButtonsController-instance的getZoomButtonsController()方法,并找到了-method,该方法返回了这个实例。

尽管已声明该方法public,但WebView-documentation中未记录该方法,并且Eclipse也找不到它。因此,我WebView对此进行了一些思考,并创建了自己的-subclass来覆盖onTouchEvent()-method,该方法触发了控件。

public class NoZoomControllWebView extends WebView {

private ZoomButtonsController zoom_controll = null;

public NoZoomControllWebView(Context context) {

super(context);

disableControls();

}

public NoZoomControllWebView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

disableControls();

}

public NoZoomControllWebView(Context context, AttributeSet attrs) {

super(context, attrs);

disableControls();

}

/**

* Disable the controls

*/

private void disableControls(){

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {

// Use the API 11+ calls to disable the controls

this.getSettings().setBuiltInZoomControls(true);

this.getSettings().setDisplayZoomControls(false);

} else {

// Use the reflection magic to make it work on earlier APIs

getControlls();

}

}

/**

* This is where the magic happens :D

*/

private void getControlls() {

try {

Class webview = Class.forName("android.webkit.WebView");

Method method = webview.getMethod("getZoomButtonsController");

zoom_controll = (ZoomButtonsController) method.invoke(this, null);

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

super.onTouchEvent(ev);

if (zoom_controll != null){

// Hide the controlls AFTER they where made visible by the default implementation.

zoom_controll.setVisible(false);

}

return true;

}

}

您可能想要删除不必要的构造函数,并对可能的异常做出反应。

尽管这看起来很笨拙且不可靠,但可以回溯到API级别4(Android 1.6)。

正如@jayellos在评论中指出的那样,私有getZoomButtonsController()方法在Android 4.0.4及更高版本中不再存在。

但是,它不需要。使用条件执行,我们可以检查我们是否在具有API Level 11+的设备上,并使用公开的功能(请参阅@Yuttadhammo答案)来隐藏控件。

我更新了上面的示例代码来做到这一点。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28898707/article/details/117503631

智能推荐

sk_buf, 再转载,太经典了 - 网络协议栈分析 - 草本植物_skbuf-程序员宅基地

文章浏览阅读4k次。本文转自: http://www.360doc.com/content/09/0205/16/36491_2466152.shtml#sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的_skbuf

怎么批量在数字里加入网页_手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇-程序员宅基地

文章浏览阅读1.2k次。/1 前言/平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。/2 项目准备工作/首先 我们第一步我们要安装一个pycham的软件。可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程。天堂网的网址:https://www.ivsky.com/bizhi/1...

传奇假人自动上线_传奇商业脚本 各种M2防假人脚本大集合 传奇私服脚本-程序员宅基地

文章浏览阅读4.9k次。各种M2防假人脚本大集合BLUE的M2防假人攻击脚本:首先先在D:\MirServer\Mir200\Envir\QuestDiary\数据文件 目录下建一个“激活.txt”文本文挡其次在D:\MirServer\Mir200\Envir\MapQuest_def 目录下的QManage.txt脚本里加上如下一段[@Login]#ifchecknamelist ..\QuestDiary\数据文件..._传奇防挂机流星验证

系统工程的本质_为什么要强调系统工程-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏15次。原文链接:https://mp.weixin.qq.com/s/9uTG1QyjOzIfeMuvioNkWw 工程,是日常生活和工作时经常使用的一个词语,例如土木工程、电子工程、机械工程、系统工程,以及法制工程、希望工程、菜篮子工程;也有三峡工程、载人航天工程、探月工程等;还有“创新是一项系统工程”“改革是一项系统工程”等说法。这个词语本身并没有令人费解的地方,但在不同的语境中,却体现出迥..._为什么要强调系统工程

TensorFlow里,shape=(?, 120)里的问号是怎么回事呢_tf shape为什么有问号-程序员宅基地

文章浏览阅读4.1k次。TensorFlow里,shape=(?, 120)里的问号是怎么回事呢125self.cos_sim(1024,51)Tensor("cosine-imilarity-layer/mul_2:0",shape=(1024,51),dtype=float32)126type(self.query_batch):<class'tensorflow...._tf shape为什么有问号

[RK3568 Android11] 开发之调试RK809 codec音频-SPK喇叭_rk3568 喇叭左右声道问题-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏10次。目录前言一、注册声卡顺序二、SPK喇叭路由配置三、tinyalsa调试工具前言瑞芯微RK809是一种复杂的功率管理集成电路(PMIC)集成编解码器,适用于由外部电源供电的多核系统应用;同时它也集成了音频编解码器,这样在硬件设计上可以直接使用RK809 codec功能,不必再外挂个其他codec芯片;RK809 codec不仅支持SPK,还支持耳机,MIC功能;一、注册声卡顺序设备树dts里面原厂帮我们配置好了rk809_sound,我们直接..._rk3568 喇叭左右声道问题

随便推点

人工智能城市和智慧城市_智慧城市:人工智能在城市管理中的应用-程序员宅基地

文章浏览阅读4.9k次。人工智能城市和智慧城市Smart cities aren’t just sci-fi or cyberpunk dreams, but an actual solution based on Artificial Intelligence and the Internet of Things. But the question is, what is the mechanism that put ..._intelligent edge computing based on machine learning for smart city

[React-Native]样式和布局_reactnative内联样式怎么用-程序员宅基地

文章浏览阅读1.2w次。一、基本样式(1)内联样式 在组件里面定义样式 小字号内联样式(2)外联样式 在组件里指向外面的样式 大字号外联样式(3)样式具有覆盖性 如果定义相同属性的样式,后面会覆盖_reactnative内联样式怎么用

CH340串口转USB驱动安装-程序员宅基地

文章浏览阅读963次。驱动下载指南_串口转usb驱动

杰里之.V006 音箱版本删除录音文件,需要优化 system.a 库【篇】_ac6965a电路图-程序员宅基地

文章浏览阅读139次。// folder : /xxxxxx // filename : xxxx0000.yyy u8 file_api_delete_file(const char *path, const char *folder, const char *filename, u32 *file_index)_ac6965a电路图

教大家如何去看开源项目_开源项目哪里找-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏10次。如何去看开源项目_开源项目哪里找

Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析-程序员宅基地

文章浏览阅读8.3k次,点赞8次,收藏34次。硬件时间,也被称为实时时钟(RTC),是指计算机主板上的一个独立于操作系统的设备,它在电源关闭甚至断电情况下也能保持运行。其功能是记录当前的日期和时间。系统时间是计算机内部使用的时间,它通常在启动时从RTC设置,然后由系统时钟进行跟踪。系统时钟是操作系统内核的一部分,可以以毫秒或纳秒级别提供精确时间。本地时间是系统时间经过时区转换后的时间。时区是根据地理位置确定的,全球分为24个时区,每个时区大约代表15度的经度。例如,北京时间是UTC+8,而伦敦时间是UTC+0。时区是为了方便统一时间而划分的地理区域。_rtc time

推荐文章

热门文章

相关标签