我的应用程序很简单 WebView以固定横向显示网页的“包装器”,页面有一个居中的 div,宽 760 像素,高 415 像素,这应该在所有设备上按比例显示,以便(大致)适合屏幕,用户不能更改缩放...除了缩放之外,我几乎一切正常。
我在页面上有以下视口(viewport)元标记:
<meta name="viewport" content="width=device-width, target-densityDpi=device-dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
WebView 的 list wrapper .apk我创建的如下:
<supports-screens android:smallScreens="true"
android:normalScreens="true" android:largeScreens="true"
android:anyDensity="true" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="{my name}"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我应该提一下,原来是 .apk目标是 Android 2.2,我最近更改为 2.3.1 并在 list 中添加了另一行,但这对任何事情都没有影响:
android:xlargeScreens="true"
我在 .java 中添加了以下内容代码:
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setScrollbarFadingEnabled(false);
webview.getSettings().setSupportZoom(false);
webview.getSettings().setBuiltInZoomControls(false);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
为了这个问题的目的,假设整个站点上的唯一内容是以下 <div> :
<div style="margin: auto; position:relative; align:center; top:0px; width:760px; height:415px; background-color:#000000">
我的问题是我无法想出一个适用于所有 Android 设备的“一刀切”的缩放解决方案,我交付的其他所有任务都可以正常工作。
我已经在三个不同的设备上尝试过这个,一个平板电脑和两个手机,<div> 的左侧、右侧和底部有一个很大的空隙。层。看起来 760 像素的宽度在两侧还有大约 50 像素的间隙,在每台设备的下方也有相同的间隙,我想要做的就是放大它,让它大致填满所有设备的屏幕。
我的手机显示有一个 window.innerWidth 854 与 window.devicePixelRatio 1.5,如果我将初始和最大比例更改为 1.12,则 <div>层几乎完全适合我的设备。该表说它有一个 window.innerWidth 980 与 window.devicePixelRatio 1.0,似乎喜欢 1.27 左右的比例。我不知道第三个设备的详细信息,但使用 1.1 似乎可以解决这个问题。
当然,更改初始缩放比例不是解决方案,即使尝试这样做也将是一场彻头彻尾的噩梦,所以,祈祷吧,谁能告诉我我遗漏的非常明显的事情,这将使这项工作成功吗?或者我只是在问不可能自动将 View 缩放到固定大小 <div> ?
最佳答案
对...在回家的路上,我陷入了困境,并进行了愉快的思考,我得出的结论是我对这个问题的思考严重过度了。
这很粗糙,但它完成了工作,我从网站上删除了元标记并将其添加到应用程序中:
// Set up up the scaling value
float scaling = 100;
int display_width;
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
display_width = dm.widthPixels;
scaling = (((float)display_width/760)*100); // 760 here is my container div width
scaling = (int) Math.floor(scaling);
// Set up the webview and apply the scale value
webview = (WebView) findViewById(R.id.webview);
webview.setInitialScale((int)scaling);
效果很好,但自从我发表这篇文章以来,我遇到了两个问题。
首先,通过删除元标记,我似乎已经删除了对最大/最小比例的限制,这意味着单击任何 <INPUT>显示 Android 键盘的元素将导致缩放比例发生变化。幸运的是,将这一行添加到代码中到目前为止解决了这个问题:
webview.getSettings().setDefaultZoom(ZoomDensity.FAR);
第二个我没有可行的解决方案,某些设备(例如 Archos101 平板电脑)具有软件按钮而不是硬件按钮。这里的缩放代码将缩放到设备宽度,这意味着网站位于软件按钮下方......目前正在考虑实现基于 READ_PHONE_STATE 的解决方案。或者有选择地添加无需硬件按钮即可退出应用程序的功能,并将其添加到 list 中:
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
希望其他人能找到这个并节省一些时间。
关于android - 通过 WebView 在 Android 设备上正确缩放网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607011/
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准rubyping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
从MB升级到新的MBP后,Apple的迁移助手没有移动我的gem。我这次是通过macports安装rubygems,希望在下次升级时避免这种情况。有什么我应该注意的陷阱吗? 最佳答案 如果你想把你的gems安装在你的主目录中(在传输过程中应该复制过来,作为一个附带的好处,会让你以你自己的身份运行geminstall,而不是root),将gemhome:键设置为您在~/.gemrc中的主目录中的路径. 关于通过MacPorts的RubyGems是个好主意吗?,我们在StackOverf