- 浏览: 236181 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (101)
- Practice (17)
- Model (15)
- Prototype (2)
- Integration (6)
- GWT (3)
- Android (16)
- Lab (6)
- Ubuntu (4)
- Data Structure(D,S) (1)
- 社会观察员 (1)
- python (14)
- redis (0)
- mysql (9)
- php (0)
- Data Structure(D (1)
- haproxy (2)
- Shell (5)
- Zabbix (1)
- CentOS (1)
- sqlplus (1)
- rlwrap (1)
- Oracle (2)
- schema (2)
- user (1)
- accredit (1)
- Delphi (2)
- nagios (1)
- nginx (0)
最新评论
-
白云飞:
兄弟能不能发一份完整的源码到我邮箱?luochengwei20 ...
【Python真的很强大】程序Log实时监控 -
myreligion:
nice job!
解决一个棘手的bug: java.lang.NoClassDefFoundError: android.os.AsyncTask -
yw9002:
你这个貌似提交的时候整个页面都会刷新。
AjaxAnyWhere+Struts的一个应用(demo/feature crew) -
fkpwolf:
这总结偏向于细节了,流水账
Android app项目和开发总结 -
crazybull:
期待详细总结~~~
Android app项目和开发总结
需求描述:
- 长按WebView出现Context menu,显示"复制”菜单
- 点击上述菜单后选择文本,复制到剪贴板
概要设计+详细设计:
- 用OnTouchListener实现长按实现(参照android.view.View)
- 实现WebView的Context menu(在Activity实例中实现)
- 实现复制文本功能(兼容多个sdk)
编码:
public class WebViewCopy { private Activity activity; private WebView webview; private static boolean mIsSelectingText; public static final String TAG=WebViewCopy.class.getSimpleName(); public WebViewCopy(final Activity activity, final WebView webView){ this.webview=webView; this.activity=activity; this.activity.registerForContextMenu(this.webview); webView.requestFocus(View.FOCUS_DOWN); webView.setOnTouchListener(new OnTouchListener() { boolean mHasPerformedLongPress; Runnable mPendingCheckForLongPress; @Override public boolean onTouch(final View v, MotionEvent event) { /* webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setSupportZoom(false);*/ Log.d(TAG, "event:" + event.getAction()); switch (event.getAction()) { case MotionEvent.ACTION_UP: mIsSelectingText = false; if (!v.hasFocus()) { v.requestFocus(); } if (!mHasPerformedLongPress) { // This is a tap, so remove the longpress check if (mPendingCheckForLongPress != null) { v.removeCallbacks(mPendingCheckForLongPress); } // v.performClick(); } break; case MotionEvent.ACTION_DOWN: if (!v.hasFocus()) { v.requestFocus(); } if( mPendingCheckForLongPress == null) { mPendingCheckForLongPress = new Runnable() { public void run() { //((WebView)v).performLongClick(); if(! mIsSelectingText) { activity.openContextMenu(webview); mHasPerformedLongPress = true; mIsSelectingText = false; } } }; } mHasPerformedLongPress = false; v. postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout()); break; case MotionEvent.ACTION_MOVE: final int x = (int) event.getX(); final int y = (int) event.getY(); // Be lenient about moving outside of buttons int slop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop(); if ((x < 0 - slop) || (x >= v.getWidth() + slop) || (y < 0 - slop) || (y >= v.getHeight() + slop)) { if (mPendingCheckForLongPress != null) { v. removeCallbacks(mPendingCheckForLongPress); } } break; default: return false; } return false; } }); } public static synchronized void emulateShiftHeld(WebView view) { try { KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0); shiftPressEvent.dispatch(view); } catch (Exception e) { Log.e(TAG, "Exception in emulateShiftHeld()", e); } } public synchronized void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo,final int copy,String menuString) { MenuItem menuitem=menu.add(1, copy, Menu.NONE, menuString); menuitem.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if(item.getItemId()==copy){ //emulateShiftHeld(webview); selectAndCopyText(webview); } return false; } }); } public static synchronized void selectAndCopyText(WebView v) { try { mIsSelectingText = true; //Method m = WebView.class.getMethod("emulateShiftHeld", Boolean.TYPE); // m.invoke(v, false); if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.ECLAIR) { Method m = WebView.class.getMethod("emulateShiftHeld", Boolean.TYPE); m.invoke(v, false); } else { Method m = WebView.class.getMethod("emulateShiftHeld"); m.invoke(v); } } catch (Exception e) { // fallback emulateShiftHeld(v); }finally{ //Toast.makeText(activity, "Select text", Toast.LENGTH_SHORT).show(); } } }
下面的代码在activity中写:
1) 在onCreate中生成 WebViewCopy 实例: copy = new WebViewCopy(this, _webView);
2) 在onCreateContextMenu中注入复制菜单public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) { copy.onCreateContextMenu(menu, v, menuInfo,COPY,getString(R.string.copy)); super.onCreateContextMenu(menu, v, menuInfo); }
回顾与总结:
OnTouchListener可能在一些时候更本不响应,如Zoom Button出现后。这得让WebView重新获取焦点,
这是WebView又一已知的Bug. 整个难点在于重新获取焦点: webview.requestFocus();
参考: http://code.google.com/p/android/issues/detail?id=7189
发表评论
-
解决一个棘手的bug: java.lang.NoClassDefFoundError: android.os.AsyncTask
2012-04-03 15:58 8804这个Bug发生在这样的环境: 你有很多的 ... -
线程阻塞队列的处理
2012-02-16 21:38 1507在日常事务中,我们常常依次做如下操作: 排队取得一个单 ... -
细数Android Bug
2012-01-26 16:12 2846咱们的三、四岁孩子:Android有些问题。现罗列一下 ... -
为Notification自定义铃声
2012-01-21 10:53 2710如下是为Notification自定义铃声的部分片段 ... -
WebView使用总结
2012-01-21 10:30 3552以下是使用WebView过程中的部分场景和解决 ... -
Drawable示例
2011-01-26 13:14 1405继上 ,完善几个Drawable示例. ... -
Android app项目和开发总结
2011-01-15 21:02 2126关键字 : android app, android ... -
Frame布局FrameLayout & Frame动画AnimationDrawable 应用实例
2010-12-20 23:05 18141)FrameLayout常常与 merge 相关,关于他 ... -
两个铁球同时落地
2010-12-11 15:22 1263这是一篇"在比萨斜塔上模拟两个铁球同时落地&qu ... -
用代理模式处理海量高频数据更新
2010-11-28 23:40 1069业务背景: 海量高频数据(如股票实时报价), 更新的规则: 被 ... -
个性化(Style/Theme)之ListView
2010-10-15 16:09 28931)Item分隔栏 只需要在Adapter中Overrid ... -
用户友好体验之ListView分页
2010-10-14 16:17 1588先贴上操作画面。其中最后一个条目是下列三者中其一。 < ... -
退出App的解决方案
2010-10-14 14:13 2599页面(activity)太多,要完全退出app基本 ... -
让用户不再遭遇ANR
2010-07-01 12:27 1557ANR简介 Android有专门的Thread ... -
TableRow数据更新时加上高亮背景
2010-06-04 11:30 1964一般Table的数据(行)更新时,要配合一定的动画效果 ...
相关推荐
本篇文章将深入探讨如何在Android WebView中实现自由复制和选择文字的功能,这对于增强用户体验至关重要,特别是对于那些包含大量文本内容的应用来说。 通常情况下,WebView默认并不支持用户直接复制文本,因此我们...
本文将深入探讨如何在WebView中实现自定义长按选择,以及选中文本的收藏和分享功能。 首先,我们需要了解WebView的基本用法。WebView继承自View类,它可以加载HTML、CSS、JavaScript等Web内容。通过调用`loadUrl()`...
在Android开发中,有时我们需要为用户提供一个可以编辑和格式化的文本输入界面,这通常涉及到富文本编辑器的实现。富文本编辑器允许用户不仅能够输入文字,还能进行字体、颜色、大小、对齐方式等多样的格式设置,...
总结,Android WebView在播放视频和复制文字方面提供了丰富的功能。通过合理的配置和编程,我们可以实现流畅的视频播放体验和便捷的文字操作。同时,注意性能和安全性的优化,以提供更好的用户体验。在实际项目中,...
`BTAndroidWebViewSelection` 是一个专门针对WebView文字选择功能的开源项目,提供了对WebView内文本的高亮、复制、分享等操作的支持。这个项目对于那些希望增强其应用程序内WebView交互性的开发者来说,具有很高的...
在Android开发中,WebView是一个非常重要的...以上就是关于“简单的webview demo 带下载功能”的核心知识点,通过这个示例,开发者可以学习到如何在Android应用中集成WebView并实现下载功能,为自己的项目提供参考。
BTAndroidWebViewSelection是一款针对安卓平台的开源项目,其主要功能是增强WebView的选择和操作功能,让用户在WebView中浏览网页时可以更加便捷地选取、复制、分享文字。在Android开发中,WebView是一个内置组件,...
`BTAndroidWebViewSelection`是针对WebView中文字选择功能的一个实现,通常用于用户在WebView中长按文字后弹出的复制、分享等操作。本项目可能包含了对WebView文字选择功能的优化或自定义实现。 1. **WebView的基本...
本项目“Android BTAndroidWebViewSelection(webview选择文字)”聚焦于Webview的一个关键功能——用户在Webview中选择文字,这涉及到Webview的交互和自定义功能扩展。 1. **Webview基础** Webview是Android SDK...
本项目“BTAndroidWebViewSelection(webview选择文字)”专注于解决一个特定的问题:在Webview中实现文本的选择和操作功能。 1. **Webview基本使用** Webview是Android SDK中的一个类,继承自View,用于加载和...
通过学习和理解这些知识点,开发者不仅可以实现自定义的Webview文本选择功能,还可以更好地理解和控制Webview的行为,提高应用的用户体验。在`BTAndroidWebViewSelection`项目中,你应该能找到关于如何实现这些功能...
另外,也可以设置WebView的缩放功能,让用户自行调整。 4. **处理图片宽度**:为了适应不同屏幕尺寸,需要控制图片宽度不超过容器宽度。可以使用CSS样式`max-width: 100%;`确保图片自适应宽度,或者在加载HTML时...
这个“简单WebView的使用-浏览器功能”主题将深入讲解如何利用WebView构建一个基本的内置浏览器功能。 一、WebView的介绍 WebView是Android SDK中的一个类,它是基于WebKit引擎的,用于在应用程序中内嵌Web页面。...
本文将深入探讨“兼容多种功能的WebView”,特别是其支持JavaScript以及上传图片的能力。 首先,我们来看一下WebView的基本使用。WebView是Android SDK提供的一种视图类,通过继承自View,可以展示网页内容。创建...
在Android开发中,富文本编辑器是一个非常重要的组件,它允许用户进行复杂的文本编辑操作,如插入图片、改变文字颜色和字体样式等。本项目主要关注的是如何在Android应用中集成一个基于Webview的富文本编辑器。...
这个项目主要探讨了如何在Android应用中实现WebView组件的文本选择、复制和分享功能,这对于开发者来说是一个非常实用的功能,特别是对于那些需要在应用内集成网页浏览体验的应用。 在Android开发中,WebView是一个...
2. **富文本支持**:对于需要显示复杂富文本内容的应用来说,Crosswalk-WebView提供了更好的支持。它可以处理各种CSS3效果、WebGL、WebSocket等现代Web技术,使得富文本网页能够得到充分展示。 3. **版本兼容性**:...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序内嵌入网页浏览功能,无需离开应用即可访问互联网内容。本教程将详细讲解如何利用WebView实现一个简单的浏览器功能,包括输入URL、打开网页以及...
总结起来,`BTWebViewSelection(webview选择文字)`是一个专注于增强Android Webview文本选择功能的模块,包括自定义选中样式、复制文本、扩展功能以及性能优化等多个方面,旨在提升用户在Webview中操作文本的便捷...