2
我有一个基于WebView.loadUrl(“http://www.example.com”)的简单应用程序。保持当前页面呈现,直到下一页加载
当用户点击一个URL时,默认行为是立即显示一个空白页面,等待页面加载,然后显示此页面。
我设法显示一个闪屏代替空白页。但是,是否可以保持当前页面呈现,而只在满载时渲染下一页?
我有一个基于WebView.loadUrl(“http://www.example.com”)的简单应用程序。保持当前页面呈现,直到下一页加载
当用户点击一个URL时,默认行为是立即显示一个空白页面,等待页面加载,然后显示此页面。
我设法显示一个闪屏代替空白页。但是,是否可以保持当前页面呈现,而只在满载时渲染下一页?
这是,我觉得,一个hacky的解决方案。我提供它作为一个临时修复,直到有人发布“真实”的方式来做到这一点。
MainActivity
类:
public class MainActivity extends Activity
{
WebView webView1, webView2;
EditText editText;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.edit_url);
webView1 = (WebView) findViewById(R.id.webView_1);
webView2 = (WebView) findViewById(R.id.webView_2);
webView1.setWebViewClient(client);
webView2.setWebViewClient(client);
webView1.loadUrl(editText.getText().toString());
}
private WebViewClient client = new WebViewClient()
{
public void onPageFinished(WebView webView, String url)
{
if (webView == webView1)
webView2.setVisibility(View.GONE);
else
webView1.setVisibility(View.GONE);
webView.setVisibility(View.VISIBLE);
Toast.makeText(MainActivity.this, "WebView " + (webView == webView1 ? "One" : "Two") + " is showing", 0).show();
}
};
private void loadUrl(String url)
{
if (webView1.getVisibility() == View.GONE)
webView1.loadUrl(url);
else
webView2.loadUrl(url);
}
public void onClick(View v)
{
loadUrl(editText.getText().toString());
}
}
main.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.webkit.WebView android:id="@+id/webView_1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<android.webkit.WebView android:id="@+id/webView_2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText android:id="@+id/edit_url"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:layout_gravity="center_vertical"
android:text="http://www.example.com" />
<Button android:id="@+id/button_load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Load" />
</LinearLayout>
</LinearLayout>
接受此答案作为唯一可用的解决方案。 – mossaab
一点题外话,你可能要考虑增加一个加载对话框(微调)如果你得到这个工作。鉴于Android中的默认行为是显示空白页面,我认为链接/按钮或者不起作用,或者如果应用程序仍然挂在前一页上,则该应用程序很慢。只是思考的食物。 –
现在我除了启动画面还有一个进度条,这不是很有用。 – mossaab
我不确定是否有“真正”的方法来做到这一点,但我只是运行了一个测试应用程序,其中包含两个WebView,当页面加载完成时,它们的可见性被切换。它工作得很好。如果你喜欢,我可以发布代码。 –