我有一个WebView应用程序,并希望添加一个启动画面,以便在加载页面时显示,或者在设定的时间内显示。我尝试了一些其他的解决方案,但找不到一个有效的解决方案。如果需要知道,我的splash图像是splash.png,位于drawable文件夹中。
这是我的MainActivity.java
public class MainActivity extends Activity {
private GoogleApiClient client;
@Override
public void onBackPressed()
{
WebView webView = (WebView) findViewById(R.id.webView);
if(webView.canGoBack()){
webView.goBack();
}
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Tap Twice To Exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.setWebViewClient(new MyBrowser());
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
if(isNetworkStatusAvialable (getApplicationContext())) {
view.loadUrl("file:///android_asset/index.html");
} else {
view.loadUrl("file:///android_asset/error.html");
}
}
public static boolean isNetworkStatusAvialable (Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null)
{
NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
if(netInfos != null)
if(netInfos.isConnected())
return true;
}
return false;
}
@Override
public void onStart() {
super.onStart();
client.connect();
Action viewAction = Action.newAction(
Action.TYPE_VIEW,
"MLINKS",
Uri.parse("http://host/path"),
Uri.parse("android-app://PACKAGE-NAME/http/host/path")
);
AppIndex.AppIndexApi.start(client, viewAction);
}
@Override
public void onStop() {
super.onStop();
Action viewAction = Action.newAction(
Action.TYPE_VIEW,
"MLINKS",
Uri.parse("http://host/path"),
Uri.parse("android-app://PACKAGE-NAME/http/host/path")
);
AppIndex.AppIndexApi.end(client, viewAction);
client.disconnect();
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
boolean doubleBackToExitPressedOnce = false;
}
感谢您的帮助!
答案 0 :(得分:1)
编辑:
定义进度对话框:
private ProgressDialog pd;
然后在你的内心:
view.setWebViewClient(new MyBrowser(){
插入此内容:
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
pd.show();
}
@Override
public void onPageFinished(WebView view, String url) {
pd.dismiss();
}
答案 1 :(得分:0)
我曾经做过类似的事情。 IIRC,它是这样的:
首先,我创建了一个特殊的ImageView
子类,它覆盖了onTouchEvent()
并丢弃了所有事件。
然后,对于我的布局,我将ImageView
子类覆盖了WebView
然后将其隐藏起来,就像这样(例如):
<FrameLayout
...
>
<WebView
...
/>
<com.example.TouchHandlerImageView
....
android:src="R.drawable.splash"
android:visibility="gone"
/>
....
</FrameLayout>
然后我的代码就像这样:
onTouchEvent()
会阻止触摸事件进入下面的WebView
WebViewClient
onPageFinshed()
中,隐藏启动图像视图,显示WebView
页面已满载。答案 2 :(得分:0)
首先制作一个背景并在主屏幕上显示它,直到数据准备就绪。
使用AsyncTask类,因为它有3个方法
1- onPreExecute()//这里不做任何事情
2- doInBackgroundProcess()//在这里获取你的数据
3- onPostExecute()//取回原始背景