2014-01-23 23 views
0

我做了一個簡單的自定義browsaer在android中,與非常基本的控制器刷新和回來,併爲Url編輯文本,我想要的是,當用戶任何網址和點擊「去」按鈕,它應該在同一個瀏覽器中打開該頁面(不是默認瀏覽器)。我已經實現瞭如下:但我的「go」按鈕不工作。它始終顯示「未找到網頁」。所以請幫助我這個我的代碼是如下:自定義瀏覽器不工作在Android

subheader.java

package com.example.browserdemo; 

import android.app.Activity; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class SubHeader extends LinearLayout implements OnClickListener { 

    private Context context; 

    public ImageView btn_back; 
    public TextView txtTitle; 
    public ImageView btn_reload; 
    public EditText et_url; 
    public Button go; 

    public SubHeader(Context context) { 
     super(context); 
     this.context = context; 
     init(); 
    } 

    public SubHeader(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
     init(); 
    } 

    public void init() { 
     View view = LayoutInflater.from(this.context).inflate(
       R.layout.uc_sub_header, this, true); 

     this.btn_back = (ImageView) view.findViewById(R.id.btn_back); 
     this.btn_reload = (ImageView) view.findViewById(R.id.btn_reload); 
     this.go = (Button) view.findViewById(R.id.go); 
     this.et_url = (EditText) view.findViewById(R.id.et_url); 

     this.btn_back.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     if (v.getId() == R.id.btn_back) { 
      ((Activity) this.context).finish(); 
     } 

    } 
} 

main.java

package com.example.browserdemo; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.view.WindowManager; 
import android.view.inputmethod.InputMethodManager; 
import android.webkit.WebSettings.LayoutAlgorithm; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 

    WebView Browser; 
    public SubHeader subHeader; 
    public EditText et_url; 
    public Button go; 
    public ImageView btn_back, btn_reload; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 

     Browser = (WebView) findViewById(R.id.webview); 
     this.subHeader = (SubHeader) findViewById(R.id.menu_header); 
     this.subHeader.btn_back.setVisibility(View.VISIBLE); 
     this.subHeader.btn_reload.setVisibility(View.VISIBLE); 

     btn_back = (ImageView) findViewById(R.id.btn_back); 
     btn_reload = (ImageView) findViewById(R.id.btn_reload); 
     Browser.loadUrl("http://www.google.com/"); 
     et_url = (EditText) findViewById(R.id.et_url); 
     go = (Button) findViewById(R.id.go); 

     btn_reload.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Browser.reload(); 
      } 
     }); 
     go.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String theWebsite = et_url.getText().toString(); 
       Browser.loadUrl(theWebsite); 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(Browser.getWindowToken(), 0); 

      } 
     }); 
     btn_back.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (Browser.canGoBack()) { 
        Browser.goBack(); 
       } 

      } 
     }); 
     generateUI(); 
    } 

    public void generateUI() { 

     new GetRealTimeUrl().execute(); 

    } 

    public class GetRealTimeUrl extends AsyncTask<Void, Void, Void> { 
     public ProgressDialog mProgress; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      this.mProgress = new ProgressDialog(MainActivity.this); 
      this.mProgress.setMessage("Please Wait..."); 
      this.mProgress.setCancelable(false); 
      this.mProgress.setIndeterminate(false); 
      this.mProgress.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      Browser.loadUrl("http://www.google.com/"); 
      Browser.setWebViewClient(new WebViewClient() { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        return false; 
       } 
      }); 
      Browser.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); 
      Browser.getSettings().setLoadWithOverviewMode(true); 
      Browser.getSettings().setUseWideViewPort(true); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      this.mProgress.hide(); 
      this.mProgress.dismiss(); 

      Message msg = new Message(); 
      msg.arg1 = 1; 

      handler.sendMessage(msg); 

      super.onPostExecute(result); 
     } 
    } 

    Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      if (msg.arg1 == 1) { 
      } 
     } 
    }; 

} 
+0

您的代碼看起來不錯,請您提供您的日誌或一些更多的細節,以便問題更清楚。 –

回答

0

至於評論,將是最好看的錯誤或日誌文件的logcat的內容

一件事我注意到,我要問,並在同一時間指出,與shouldOverrideUrlLoading的覆蓋......這應該是裝載的URL之前....

試着將Browser.loadUrl("http://www.google.com/");

Browser.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);

前10

在我的理解中,程序的流程是首先設置監聽器/覆蓋,以便他們準備好進行響應,然後加載要截取的URL。

0

只要確保 - 您是否在清單文件中添加了以下權限? -

<uses-permission android:name="android.permission.INTERNET" /> 
相關問題