我有一个线性布局(width = fill parent,基本上它填充了设备的整个宽度),它包含2个子布局。一个linearlayout(我们称之为linear1),width = fill_parent,第二个是width = fill_parent的webview。默认情况下,webview是通过visibility = GONE定义的,所以它不会显示在屏幕上,它不占用任何空间。Android的createbitmap宽度在不同的设备上表现不同
<ParentLinear> <Linear1 width=fill_parent></Linear1> <Webview width=fill_parent></Webview> </ParentLinear>
予编程加载一个表面视图入线性布局linear1和web视图仍然能见度=不见了。表面视图占用了所有设备上手机的全部宽度,在那里没有问题。现在,在某些情况下,我以编程方式隐藏了linear1(visibility = gone),并使用canvas创建了一个使用createbitmap/write的新位图,将其作为文件编写,然后将其加载到webview中并使webview可见。为了使位图只使用设备的整个宽度,不多也不少,我所做的是在使用getwidth隐藏之前找到linear1的宽度(并且我得到正确的值,它不是0),然后我将其设置为我创建的位图的宽度。
现在,位图创建时没有问题,我将它作为文件写入设备,然后从文件系统将其加载到webview中,并且都很好,并且很花哨。它的行为正是我想要它在HTC Inspire上运行的(Andriod 2.3我认为...),位图/ web视图占据了设备的整个宽度,位图的大小与linear1的宽度完全相同。但是当我在HTC One MIni(android 4.2.2)上测试这个时,位图的宽度比设备的宽度和linear1的宽度大得多,尽管我最初使用linear1的宽度创建了位图占据设备的整个宽度。当我在Kindle FIre(kindle fire的第一个版本)上测试它时,位图的宽度小于linear1的宽度。基本上按照HTC Inspire的预期工作,但在HTC One Mini和KIndle Fire上有所不同。我没有在任何其他设备上测试过。
只是要清楚,我不是指我知道可以调整的web视图的缩放比例,我指的是位图的大小。这可能与每个设备的分辨率,每个设备的像素等有关,但是我不明白的是因为我实际上使用了linear1的宽度来设置位图的宽度,那么为什么它不是确切的相同。还有一件事,如果我在位图上做一个getwidth,我得到的数字与linear1相同,但是在屏幕上它们不匹配,位图明显变大或变小。请让我知道,如果你可以给我一些指示,了解这是如何工作的。
以下是我认为相关的代码部分。
int bitmapX = linear1.getWidth() //this is the value under question
int bitmapY = 600; // will need to convert from dip to pixel later
Bitmap myBitMap = Bitmap.createBitmap(bitmapX, bitmapY, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(myBitMap);
-- there is other code which is not shown here to write stuff into the bitmap using canvas --
canvas.save();
canvas.translate(
myBitMap.getWidth()/2 ,
myBitMap.getHeight()/2);
canvas.restore();
writeBitmap(myBitMap); //writes the bitmap to a file calling a user defined function.
myBitMap.recycle();
这些金额乘以从我可以辨认出它是某种相关设备的DP。我会建议你发布你的代码。请记住:“代码说话比文字更响亮” –
这就是我的想法..我现在添加了一段代码。 –
您可以使用ImageView而不是WebView?这种行为绝对是因为你的硬编码高度。我会建议你尝试'yourWebView.setInitialScale(100);' –