我有以下 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?它适用于所有设备/Android 版本吗?为什么它适用于第二个电话,但不适用于第一个电话?
问候,