Articles of android webview

WebView如何从当前的Android主题inheritance颜色?

此问题最初发布在谷歌版主上,用于上周举行的AndroidDev办公时间环聊。 问题实际上是现场回答,如果你愿意,你可以在这里观看。 我在这里张贴它因为它们似乎对它感兴趣而且我在这里有更多的空间来详细阐述。 WebView通常用于显示作者想要的Web内容(因为它们在环聊中声明)。 但我使用WebView来显示内容本身并不完全是内容,而是使用格式化文本 (主要是粗体,斜体,项目符号列表和文本对齐)。 使用WebView (换句话说,使用HTML / CSS更容易)比使用一堆TextView并使其完全格式化更容易。 问题是我在AlertDialog上使用这个具有透明背景的特定WebView 。 WebView文本颜色来自加载的内容CSS,但重要的是此颜色与AlertDialog的背景颜色形成对比。 那是我的问题。 直到Android 2.3, AlertDialog背景总是很暗。 如果应用程序主题是默认的暗色或浅色, AlertDialog , AlertDialog仍然是深灰色。 这个在香草Android上。 但即使在蒙皮的Android(Sense,TouchWiz,MotoBlur等……)上, AlertDialog也一直是暗色(对于默认/暗色和浅色主题)。 这一切都随着ICS而改变(它可能在Honeycomb上有所改变,但我没有证实)。 默认/黑暗主题现在有一个黑暗的AlertDialog而灯光主题实际上有一个轻的AlertDialog 。 由于我在我的应用程序上专门使用灯光主题,我可以通过使用不同的CSS文件加载WebView内容轻松解决我的问题。 一种是深色文本颜色,适用于ICS以下版本,另一种是浅色文本颜色,适用于ICS及以上版本。 如果不是OEM皮肤,这将主要解决我的问题。 在他们的ICS皮肤版本中,他们可能为AlertDialog提供暗/亮主题。 或不。 他们更有可能做到这一点,像往常一样提供黑暗和明亮的主题,但对于AlertDialog只有一个黑暗的版本,无论应用程序的主题。 我可以在我的应用程序上强制使用Holo并以这种方式解决问题,但我不想干扰整个系统在用户设备上的外观。 例如,如果他们有Sense并且非常喜欢它,我不想在使用我的应用程序时显示Holo主题AlertDialog 。 最终,我的问题是: 那么,我该如何应对呢? 如何确保我的WebView上的文本对AlertDialog背景可读? 无论是Android版本,还是正在使用的主题,或者它是否被原始设备制造商剥露…… 我不知道这有多可行,但解决这个问题的另一种方法是以某种方式从设备中的AlertDialog主题中提取文本颜色。 但不是默认主题或Holo主题,而是我相信的DeviceDefault主题。 这种提取容易吗? 这可能是我的问题的一个很好的解决方案吗? 你还有其他选择吗? 最后一个细节……如果你看了一下video群聊以及实际回复我的人,其中一个建议注入CSS。 如果我以前不清楚,我不需要这样做。 我只需要使用我想要的CSS来构建WebView内容String,它可以采用从主题中提取的文本颜色。

如何打开Facebook粉丝页面并检查用户是否喜欢它

这是我正在努力工作的流程: 活动打开,向用户显示“赞”按钮 用户点击按钮,Facebook的登录屏幕显示出来 用户登录并被定向到粉丝页面(通过Intent或WebView …或其他任何有效的:) 用户喜欢这个页面 用户按下Android的后退按钮并返回活动状态 活动恢复并检查用户是否确实喜欢该页面。 如果他这样做,就给予他积分。 所以,对于这个解决方案,我使用的是RestFB( http://restfb.com/ )和Facebook Android API v3.0 当用户单击“赞”按钮时,我会执行以下操作: private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { //facebookClient is the RestFB object facebookClient = new DefaultFacebookClient(session.getAccessToken()); Intent i = new Intent(MainActivity.this, FacebookWebViewActivity.class); startActivity(i); } }; 使用此代码,我可以成功登录Facebook(获取AUTH_CODE),然后我调用我的WebView,它应该将用户引导到我想要的粉丝页面。 这个WebView活动非常简单,只需: webView.setOnKeyListener(new OnKeyListener() […]

Android WebView SSL’安全警告’

我正在为客户构建一个应用程序的测试版本。 此应用程序的一部分使用调用基于SSL的站点的WebView。 反过来,客户端提供了一个测试域,其中证书名称与FQDN不匹配。 唉,他们无法提供匹配的证书。 🙁 我正在使用一行代码在同伴iOS ad hoc应用程序上解决此问题(同样,不用于生产用途 – 仅用于测试目的)。 我已经在Android操作系统上搜索过类似的信息,但是我在这里和其他地方看到的解决方案足以让我的头脑旋转比较大! 有解决这个问题的简单方法吗? 即使面向用户的设置隐藏在某个地方? 线索赞赏!

Android Performance XML Drawable vs CSS3 vs Images

我正在尝试在Android应用中创建一些自定义切换按钮。 我希望它们看起来如下: 在该图像中,75,39和AZ处于“关闭”状态,37处于“开”状态。 所以我的问题是: 哪种是在Android中生成这些内容的最佳方式: 带有边框,背景,边框半径的XML drawable 每个形状,状态和屏幕密度的一组9补丁图像,或 使用WebView并使用CSS3?

异步调用WebView#getDrawingCache()而不冻结UI线程

我正在尝试抓取WebView的屏幕截图,但是,WebView#getDrawingCache(true)是一个昂贵的调用并冻结了UI线程。 然而,任何将其移动到AsyncTask或单独线程的尝试都将导致“必须在UI线程上调用所有WebView方法”错误。 有没有解决方法,这样我可以在后台线程中使用WebView#getDrawingCache(true)而不冻结UI线程? 这是一个崩溃的代码示例 public class TouchTask extends AsyncTask { Runnable completionCallback; @Override protected Void doInBackground(Object… objects) { Integer id = (Integer) objects[0]; completionCallback = (Runnable) objects[1]; touch(id); return null; } @Override protected void onPostExecute(Void res) { super.onPostExecute(res); completionCallback.run(); } } /* Updates the webview’s bitmap in cache */ public Pair touch(Integer id) { CustomWebView […]

需要在CookieSyncManager :: getInstance()之前调用CookieSyncManager :: createInstance()

此错误消息非常清楚: 需要在CookieSyncManager :: getInstance()之前调用CookieSyncManager :: createInstance() 但我只是因为我遵循官方文档而得到此错误: 要使用CookieSyncManager,主机应用程序必须在应用程序启动时调用以下内容: CookieSyncManager.createInstance(context) 要设置同步,主机应用程序必须调用 CookieSyncManager.getInstance().startSync() 在Activity.onResume()中 仅当应用程序尝试恢复时才会发生错误,而不是在干净地启动时。 所以,我可以通过将CookieSyncManager.createInstance(context)移动到Activity.onResume()来解决这个问题,但是……不会创建新问题吗? (例如,每次应用程序恢复时都忘记以前的会话cookie?)

我可以在webview中打开相机吗?

我可以在webview中打开android摄像头吗?

在Android WebView中读取键盘事件

我正在尝试在android web视图中收听关键事件。 用户填写表单时的示例,我应该收到关键事件。 这是我的WebView代码 public class MyWebView extends WebView implements OnKeyListener { ….. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.i(“PcWebView”, “onKeyDown keyCode=” + keyCode); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.i(“PcWebView”, “onKeyUp keyCode=” + keyCode); return super.onKeyUp(keyCode, event); } @Override // Listener is initialized in the constructor […]

存储WebView以进行脱机浏览

加载页面后,强制Android将webview存储到媒体的最佳方法是什么? 更多细节: 每个页面都将丰富的图像,脚本和样式。 每页大约0.5到1兆字节。 一旦调用OnFinishedLoading Override,它们将被保存。 最好将其保存到SD卡,然后使用本地仓库将其打开备份。 不确定我是否应该只为webview使用sql数据库,或者采用每个视图并写出文件。 如果我做后者,那么最简单的方法是什么,所以我不必写一个完整的webcrawler来连接每个文件?

onData上的Android空白屏幕在loadDataWithBaseURL中

可能它会有一个简单的解决方案,但我在这里阅读了很multithreading,但没办法。 在ListView中,如果我点击一行它会打开一个新的活动。 在那个活动中,我创建了一个httpget,然后我从httpget(检索到的网页的一部分)创建了一个html字符串。 所以我只需要创建一个loadDataWithBaseURL(“http://base_path.com/”, html, mime, encoding, null) 。 它按预期工作,我查看带有链接和图像的网页。 现在问题来了……如果我点击图像,我会看到窗口中的大图像,但是一旦我按下手机上的“背面”,我就会看到一个白页。 我知道它是由“null”参数引起的,但是…我应该再次看到html页面了吗? 我试图把“html”而不是null但是我在webview中看到了html代码! 这是我的onKeyDown来覆盖后退按钮: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the BACK key and if there’s history if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } // If it wasn’t the BACK key or […]