2016-09-30 3 views
1

Перед открытием адреса в WebView мне нужно сделать панель загрузки. Он пуст и не может работать с темами, найденными здесь. Перед открытием необходимо загрузить.Загрузка в WebView

Извините за мой английский.

public class TelaPrincipal extends ActionBarActivity{ 

WebView webView; 
private static final String TAG = TelaPrincipal.class.getSimpleName(); 
private String mCM; 
private ValueCallback<Uri> mUM; 
private ValueCallback<Uri[]> mUMA; 
private final static int FCR=1; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
    super.onActivityResult(requestCode, resultCode, intent); 
    if(Build.VERSION.SDK_INT >= 21){ 
     Uri[] results = null; 
     //Check if response is positive 
     if(resultCode== Activity.RESULT_OK){ 
      if(requestCode == FCR){ 
       if(null == mUMA){ 
        return; 
       } 
       if(intent == null){ 
        //Capture Photo if no image available 
        if(mCM != null){ 
         results = new Uri[]{Uri.parse(mCM)}; 
        } 
       }else{ 
        String dataString = intent.getDataString(); 
        if(dataString != null){ 
         results = new Uri[]{Uri.parse(dataString)}; 
        } 
       } 
      } 
     } 
     mUMA.onReceiveValue(results); 
     mUMA = null; 
    }else{ 
     if(requestCode == FCR){ 
      if(null == mUM) return; 
      Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); 
      mUM.onReceiveValue(result); 
      mUM = null; 
     } 
    } 
} 

@SuppressLint({"SetJavaScriptEnabled", "WrongViewCast"}) 
@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.telaprincipal); 

    webView = (WebView) findViewById(R.id.webView); 
    assert webView != null; 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setAllowFileAccess(true); 

    if(Build.VERSION.SDK_INT >= 21){ 
     webSettings.setMixedContentMode(0); 
     webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
    }else if(Build.VERSION.SDK_INT >= 19){ 
     webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
    }else if(Build.VERSION.SDK_INT >=11 && Build.VERSION.SDK_INT < 19){ 
     webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
    } 
    webView.setWebViewClient(new Callback()); 
    webView.loadUrl("https://strikebrasil.gmpe.com.br/login"); 
    webView.setWebChromeClient(new WebChromeClient(){ 
     //For Android 3.0+ 
     public void openFileChooser(ValueCallback<Uri> uploadMsg){ 
      mUM = uploadMsg; 
      Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
      i.addCategory(Intent.CATEGORY_OPENABLE); 
      i.setType("image/*"); 
      TelaPrincipal.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FCR); 
     } 

     // For Android 3.0+, above method not supported in some android 3+ versions, in such case we use this 
     public void openFileChooser(ValueCallback uploadMsg, String acceptType){ 
      mUM = uploadMsg; 
      Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
      i.addCategory(Intent.CATEGORY_OPENABLE); 
      i.setType("*/*"); 
      TelaPrincipal.this.startActivityForResult(
        Intent.createChooser(i, "File Browser"), 
        FCR); 
     } 
     //For Android 4.1+ 
     public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ 
      mUM = uploadMsg; 
      Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
      i.addCategory(Intent.CATEGORY_OPENABLE); 
      i.setType("image/*"); 
      TelaPrincipal.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), TelaPrincipal.FCR); 
     } 
     //For Android 5.0+ 
     public boolean onShowFileChooser(
       WebView webView, ValueCallback<Uri[]> filePathCallback, 
       WebChromeClient.FileChooserParams fileChooserParams){ 
      if(mUMA != null){ 
       mUMA.onReceiveValue(null); 
      } 
      mUMA = filePathCallback; 
      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      if(takePictureIntent.resolveActivity(TelaPrincipal.this.getPackageManager()) != null){ 
       File photoFile = null; 
       try{ 
        photoFile = createImageFile(); 
        takePictureIntent.putExtra("PhotoPath", mCM); 
       }catch(IOException ex){ 
        Log.e(TAG, "Image file creation failed", ex); 
       } 
       if(photoFile != null){ 
        mCM = "file:" + photoFile.getAbsolutePath(); 
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
       }else{ 
        takePictureIntent = null; 
       } 
      } 
      Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); 
      contentSelectionIntent.setType("image/*"); 
      Intent[] intentArray; 
      if(takePictureIntent != null){ 
       intentArray = new Intent[]{takePictureIntent}; 
      }else{ 
       intentArray = new Intent[0]; 
      } 

      Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); 
      chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 
      chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 
      startActivityForResult(chooserIntent, FCR); 
      return true; 
     } 
    }); 

} 
public class Callback extends WebViewClient{ 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){ 
     Toast.makeText(getApplicationContext(), "Failed loading app!", Toast.LENGTH_SHORT).show(); 
    } 
} 

// Create an image file 
private File createImageFile() throws IOException{ 
    @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "img_"+timeStamp+"_"; 
    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
    return File.createTempFile(imageFileName,".jpg",storageDir); 
} 
@Override 
public boolean onKeyDown(int keyCode, @NonNull KeyEvent event){ 
    if(event.getAction() == KeyEvent.ACTION_DOWN){ 
     switch(keyCode){ 
      case KeyEvent.KEYCODE_BACK: 
       if(webView.canGoBack()){ 
        webView.goBack(); 
       }else{ 
        finish(); 
       } 
       return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
} 

}

У меня есть всплеск, прежде чем ... но то, что я не получаю все белое, если страница еще не была заряжена. Я хочу показать отгрузку, а затем, только когда вы на 100% загрузились, отобразите страницу. Спасибо

+0

Надеюсь, это поможет: [Показывать ProgressDialog, пока WebView не завершит загрузку веб-страницы] (http://stackoverflow.com/a/33444421/6213557). –

ответ

0

Поместите свой веб-просмотр в рамки framelayout и putan imageview также в framelayout. Пока страница загружается, покажите imageView (анимируйте, если хотите).