为WebView加上复制文本功能 博客分类: Android webviewcopycontext menu 需求描述: 长按WebView出现Context menu,显示"复制”菜单 点击上述菜单后选择文本,复制到剪贴板 概要设计+详细设计: 用OnTouchListener实现长按实现
首先做个app的架子,然后把拉普达的网址放进去,就行了……应该是这样额。
后来发现没那么简单,写了一些东西,能更换头像了。
举个栗子,假如我在这个正文的输入框内写东西,不小心点了返回键,返回到上一个页面,在点回来的时候,日记就没了,或者,我写东西,切出浏览器,接电话玩游戏去了,回来的时候发现浏览器重启也没了。
所以考虑到这两种情况,我做了一些处理,在没提交日记,返回上一页或者切出的时候,进行了日记暂时保存,注意只能保存你最近输入的一次的东西。
草稿功能就在首页一个悬浮的按钮,大家安装了就能看得到了,点进去是一个页面,右上角能快捷复制,也可以长按文字复制。
这是首页的草稿功能就是那个小黑圈:
这是草稿功能页面:
首先要拿到正文这个textarea控件里输入的内容,我是绝对改不了影响不到网页里的东西的,只能取,
然后百度,怎么取到webview里面textarea的值,然后找了一个,发现确实可以,已经能取到特定id的控件的值了,然后呢,什么时候取这种值呢,当然是在返回上一页的时候,或者在后台运行的时候也取一下,保存。
这样就可以了。
然后就是在首页加个草稿按钮入口,新写一个草稿页面,我还特意写了一个和拉普达差不多的标题栏,下面的内容是一个TextView控件,取保存的那个值,如果不为空就显示草稿,为空就显示暂无草稿。
复制功能的话,就是把值黏贴到系统粘贴板上就行了。
对了,草稿那个页面是可以侧滑返回的哦,也可以点击左上角的logo返回。
使用jsoup获取日记详情里面标签里的内容,拿到标题,还有日记链接,然后保存到本地,就可以实现了。
只保留草稿功能 拉普达日记apk 密码:9dbh
Flutter项目中遇到在安卓端,输入框不能长按粘贴,其它像iOS端、浏览器功能都是正常的。查询各种资料,部分说是官方为了避免手势冲突禁用了长按粘贴功能。各种查资料、各种尝试都开启不了这一功能,而项目紧急那只能曲线救国了。
第一个方案:
因为h5复制文本内容到剪贴板这块是没问题的,那么h5是否可以直接获取剪贴板中的内容直接填写到输入框中,然而,居然获取不到,说啥子只有在IE浏览器中才管用。
第二个方案(最终方案):
h5获取不到,但原生端不是可以的吗。最终流程,h5端输入框开始编辑,去调用原生端方法,告知需要获取剪贴板内容,原生端获取剪贴板内容调用h5端方法同时传值给h5端,最后输入框中不就有值了吗。
1、webViewloadUrl();
直接显示网页内容(单独显示网络),一般不会出现乱码。
2、webViewloadData(data, "text/html", "UTF-8");
loadData主要被设计用来装载URI格式的数据,它不能通过网络来加载内容。网上流传的webview加载中文出现乱码,多数是使用此方法。使用过程中主要有两个问题:
(1)loadData不能加载内容,如果想加载内容或者获得更强大的Web支持建议使用更强大的loadDataWithBaseURL
(2) 许多实用loadData方法的朋友都遇到显示乱码的问题,那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式。举例如下:
WebView wv = (WebView)findViewById(Ridwebview) ;
wvgetSettings()setDefaultTextEncodingName(“UTF -8”) ;
wvloadData(content, “text/html”, “UTF-8”) ;
注意为gb2312或gbk
(3)网页说明编码格式
以上两种方法是网上给的比较好的方法,但是我都试了下都没有解决我的乱码问题。 原来我是用LoadData方法来解析html的,但是据说这是官方的一个BUG,不能用来解析中文。所以绕其道而行之,采用loadDataWithBaseURL的方法,其中codeingType设置为utf-8就OK了。3、loadDataWithBaseURL如果单纯显示文字的话可以写webViewloadDataWithBaseURL(null, string, "text/html", "utf-8", null);
如果要显示可以写webViewloadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
其中baseUrl为你存储照片的路径,比如:
手机微信转发时出现了俩个蓝点是打开什么了。咋关闭了或退出了想回复正常了。咋去除那俩个蓝点了,手机微信转发时出现了俩个蓝点是打开什么了。咋关闭了或退出了想回复正常了。咋去除那俩个蓝点了,手机微信转发时出现了俩个蓝点是打开什么了。咋关闭了或退出了想回复正常了。咋去除那俩个蓝点了,手机微信转发时出现了俩个蓝点是打开什么了。咋关闭了或退出了想回复正常了。咋去除那俩个蓝点了!
最近开发中使用的是百度地图android SDK:
1、初始化地图
2、注册定位监听器,初始化Location模块
3、初始化定位图层;启用定位,启用指南针,最后把定位图层添加到地图中。附简单代码:
//mMapView = (MapView) findViewById(RidbmapsView);
mMapView = new MapView(this); //初始化一个mapView 存放Map
mMapViewsetBuiltInZoomControls(true);// 设置启用默认的缩放控件
locationManager = mBMapMangetLocationManager();
/
由于LocationListener获取第一个位置修正的时间会很长,为了避免用户等待,
在LocationListener获取第一个更精确的位置之前,应当使用getLocationInfo() 获取一个缓存的位置
/
Location location = locationManagergetLocationInfo();
locationManagerrequestLocationUpdates(this);
mMapController = mMapViewgetController();// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
if (location != null) {
mMapControllersetCenter(new GeoPoint(
(int) (locationgetLatitude() 1E6), (int) (location
getLongitude() 1E6)));
}
mMapControllersetZoom(12);// 设置地图zoom级别
MyLocationOverlay mylocTest = new MyLocationOverlay(this, mMapView);
mylocTestenableMyLocation();
mylocTestenableCompass();
mMapViewgetOverlays()add(mylocTest);
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if (location != null) {
mMapControlleranimateTo(new GeoPoint(
(int) (locationgetLatitude() 1E6), (int) (location
getLongitude() 1E6)));
}
}
如果你想点击定位地点,显示信息,你需要去扩展MyLocationOverlay图层,它里面有个public boolean onTap(GeoPoint p, MapView map) {}方法,是处理点击事件的。
有问题,可以与我联系,共同探讨。
开发过程工我们会用webview显示一些活动或是变动比较频繁的页面,若是webview中包含,一般会有保存的需求,我们可以采用js交互的形式获取的url,话不多说直接看 *** 作
获取点击位置的element,中的src值,即可
补充问题
1、在安卓设备上发现长按手势并没有调用,翻看 webview_flutter 发现需要设置安卓的类型,展示webview之前设置
2、获取到的url也就是开始返回的value值,安卓会带有”“,需要自行去掉
给WKWebView添加手势
屏蔽前端页面自带的长按d出列表
获取长按点击位置对应的url (JS交互)
github Demo请点此
以上就是关于UIWebView怎么禁用掉长按后的文字选择框全部的内容,包括:UIWebView怎么禁用掉长按后的文字选择框、拉普达日记APP、Flutter WebView安卓端输入框不能长按粘贴等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)