简体   繁体   English

如何在android webview应用程序中添加加载图像?

[英]How to add a loading image in android webview app?

I am totally new to android development basically I am a web developer, I done a Udemy course about converting a wordpress site to android webview app. 我基本上是一个完全不熟悉android开发的人,我是一名Web开发人员,我完成了有关将wordpress网站转换为android webview应用程序的Udemy课程。 Which I followed and made a app by just copying the code from files. 接下来,我通过复制文件中的代码制作了一个应用程序。 Now when ever I open the app I see a white screen which sometimes give feeling that app is not working but the app is loading web page. 现在,无论何时打开应用程序,我都会看到一个白屏,有时会感觉到该应用程序无法正常工作,但该应用程序正在加载网页。 Now I would like to add a loading image or loader any thing. 现在,我想添加一个加载映像或加载器任何东西。 Here is my code of mainActivity.java 这是我的mainActivity.java代码

public class MainActivity extends ActionBarActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.loadUrl("http://bikanershop.com/");
    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());
    // Stop local links and redirects from opening in browser instead of
    //WebView
    mWebView.setWebViewClient(new MyAppWebViewClient());
    Parse.initialize(this, "oI7lWjyQc0EhpDsn1cyfaoCtpUbKQp1rFbX6PPZN", "FIeGPOxqKe3jBuvXKjW4Ml69K12tjDRq6sLruqUQ");
    ParseInstallation.getCurrentInstallation().saveInBackground();


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

} }

another file is myAppWebViewClient.java 另一个文件是myAppWebViewClient.java

public class MyAppWebViewClient extends WebViewClient
{
@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
  {
    if(Uri.parse(url).getHost().endsWith("bikanershop.com"))
  {
        return false;
    }

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    view.getContext().startActivity(intent);
    return true;
     }
}

and xml file is as below AndroidMenifest.xml 和xml文件如下AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bikanershop.bikanershop" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission
    android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission
    android:name="com.google.android.c2dm.permission.RECEIVE" />
<!--
 IMPORTANT: Change
"com.parse.tutorials.pushnotifications.permission.C2D_MESSAGE" in the
lines below
 to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
    android:name="com.bikanershop.bikanershop.permission.C2D_MESSAGE" />
<uses-permission
    android:name="com.bikanershop.bikanershop.permission.C2D_MESSAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name="com.parse.PushService" />
    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action
                android:name="com.google.android.c2dm.intent.REGISTRATION"   />
            <!--
            IMPORTANT: Change "com.parse.tutorials.pushnotifications" to
           match your app's package name.
            -->
            <category android:name="com.bikanershop.bikanershop" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.ParsePushBroadcastReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>
</application>
<uses-permission android:name="android.permission.INTERNET" />

I am using android studio latest version that is 1.1.0 我正在使用最新的Android Studio版本1.1.0

Use a ProgressDialog , as outlined Here . 使用ProgressDialog ,所概述这里

For your case, since you need to close the dialog, you should just in-line your functionality from myAppWebViewClient.java . 对于您的情况,由于需要关闭对话框,因此应该只从myAppWebViewClient.java功能。
So your new code would be something like this: 因此,您的新代码将如下所示:

    public class MainActivity extends ActionBarActivity {

    private ProgressDialog dialog = new ProgressDialog(WebActivity.this);
    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.activity_main_webview);

        webView.setWebViewClient(new WebViewClient() {
          @Override
          public void onPageFinished(WebView view, String url) {                  
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
          }

          @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url)
         {
            if(Uri.parse(url).getHost().endsWith("bikanershop.com"))
            {
                return false;
            }

            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(intent);
            return true;
         }

       });
       dialog.setMessage("Loading..Please wait.");
       dialog.setCanceledOnTouchOutside(false);
       dialog.show();



        // Enable Javascript
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        mWebView.loadUrl("http://bikanershop.com/");
        // Force links and redirects to open in the WebView instead of in a browser
        //mWebView.setWebViewClient(new WebViewClient()); //replaced with code above

        // Stop local links and redirects from opening in browser instead of
        //WebView
        //mWebView.setWebViewClient(new MyAppWebViewClient());                      
        Parse.initialize(this, "oI7lWjyQc0EhpDsn1cyfaoCtpUbKQp1rFbX6PPZN", "FIeGPOxqKe3jBuvXKjW4Ml69K12tjDRq6sLruqUQ");
        ParseInstallation.getCurrentInstallation().saveInBackground();


    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM