0

私は次のXMLを持っています:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/rl"
    android:background="@color/red"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <WebView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="10dp"
        android:layout_height="10dp" />
</RelativeLayout>

私が電話するとき:

view.layout(50, 50, 1024 - 50, 600 - 50);

onCreate()およびonStart()からは、効果はありません。しかし、shouldOverrideKeyEvent()に同じ呼び出しを追加してキーを押すと、機能します。私の設定がXMLの設定によって上書きされているためだと思います。したがって、問題は、layout()をできるだけ早く呼び出す必要があるが、android:layout_width = "10dp"とandroid:layout_height="10dp"がすでに適用された後です。

アップデート

私はblessenmによるソリューションを使用します。

private class LayoutListener implements OnGlobalLayoutListener
{
    public void onGlobalLayout()
    {
        Display display = getWindowManager().getDefaultDisplay();
        int screenWidth = display.getWidth();
        int screenHeight = display.getHeight();

        // Workaround for a 'fill_parent' bug on my tablet (Kindle Fire).
        _WebView.layout(0, 0, screenWidth, screenHeight);
        _WebView.loadUrl("http://192.168.1.2");
        //_Layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    }
}

removeGlobalOnLayoutListener()をコメントアウトすると、動作を停止します。デバッガーは2回呼び出されたことを示しているので、2回目の呼び出しで実際にサイズが設定されるだけだと思います。そのため、リスナーを削除しないことにしました(2回呼び出された場合、それはパフォーマンスキラーではありません)。永続的な下部バーをクリックするたびに呼び出され、ツールバーが表示されることに気付くまでは、問題ないように見えました。また、レイアウトを設定してからサイトを読み込んでいるので、毎回リロードされています。また、サーバーは特定のサイズに合わせて特別に最適化されたコンテンツを送信するため、ビューのサイズが正しい場合にのみサイトをロードする必要があります。

そのため、リスナーを離れることができず、削除する必要があります。でもいつ?2まで数えますか?すべてのデバイス/Androidバージョンで動作しますか?2回目の呼び出しでは機能するのに、最初の呼び出しでは機能しないのはなぜですか?

よろしく、

4

2 に答える 2

4
WebView webview = (WebView)findViewById(R.id.webview);
MarginLayoutParams marginsParams = new MarginLayoutParams(webview.getLayoutParams());
marginsParams.setMargins(50, 50,1024-50, 600-50);
RelativeLayout.LayoutParams lp = new LayoutParams(marginsParams);
webview.setLayoutParams(lp);

このコードを試してください::::

于 2012-04-22T02:25:50.297 に答える
2

onCreateイベントでは、レイアウトがまだ描画または測定されていないためだと思います。したがって、そのイベントでレイアウトを呼び出そうとしても、影響はありません。あなたのコードをviewtreeobserverに入れてみてください、それはうまくいくかもしれません。

これをアクティビティのonCreateに追加します

ViewTreeObserver vto        =   layout.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        view.layout(50, 50, 1024 - 50, 600 - 50);
        layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    } 
}); 

ここで、layoutは親または外部レイアウトにすることができます。

于 2012-04-22T01:56:00.420 に答える