私は線形レイアウト (幅 = 親を埋める、基本的にはデバイスの幅全体を埋めます) を持っています。これには 2 つの子レイアウトが含まれています。width=fill_parent の 1 つの linearlayout (linear1 と呼びましょう) と 2 つ目は width=fill_parent の webview です。デフォルトでは、webview は visibility=GONE で定義されているため、画面に表示されず、スペースを占有しません。
<ParentLinear>
<Linear1 width=fill_parent></Linear1>
<Webview width=fill_parent></Webview>
</ParentLinear>
プログラムでサーフェス ビューをリニア レイアウト linear1 に読み込みますが、webview は visibility=gone のままです。表面ビューは、すべてのデバイスで電話の全幅を占めていますが、問題はありません。特定の条件下で、linear1 (visibility=gone) をプログラムで非表示にし、createbitmap を使用して新しいビットマップを作成し、canvas を使用して書き込み、ファイルとして書き込み、webview にロードして webview を表示します。ビットマップがデバイスの幅全体を使用するようにするには、getwidth を使用して非表示にする前に、linear1 の幅を見つけます (正しい値を取得しますが、0 ではありません)。作成しているビットマップの幅として設定します。
これでビットマップは問題なく作成されました。ファイルとしてデバイスに書き込み、ファイル システムから Web ビューにロードすると、すべて問題なく動作します。HTC Inspire(andriod 2.3だと思います..)での動作は正確に動作し、ビットマップ/ Webビューはデバイスの幅全体を占有し、ビットマップのサイズはlinear1の幅とまったく同じです。しかし、HTC One MIni (android 4.2.2) でこれをテストすると、ビットマップの幅は、デバイスの幅と linear1 の幅よりもはるかに大きくなります。デバイスの全幅を占めます。Kindle FIre (kindle fire の最初のバージョン) でテストすると、ビットマップの幅は linear1 の幅よりも小さくなります。基本的に、HTC Inspire で期待どおりに動作します。ただし、HTC One Mini と KIndle Fire では異なります。他のデバイスではテストしていません。
明確にするために、私は調整できることがわかっているWebビューのズームについて言及していません。私が言及している問題はビットマップのサイズです。これは、各デバイスの解像度、ピンチあたりのピクセル数などに関係している可能性がありますが、ビットマップの幅を設定するために実際に linear1 の幅を使用したので、なぜ正確ではないのでしょうか同じ。もう1つ、ビットマップで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();