2017-01-05 15 views
3

私はプログラムのさまざまな部分に多くのWebViewを持っていますが、これらのWebViewは相互に違いないので、必要な設定でカスタムWebViewを作成したいのです。現在のところ、WebViewは表示されませんが、エラーはありません。私は何か間違っているのですか?カスタムWebViewを作成する

public class MyWebView extends WebView { 

    MyWebView mMyWebView; 

    public MyWebView(Context context) { 
     super(context); 
    } 

    public MyWebView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyWebView initView(Context context){ 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     MyWebView view = (MyWebView) inflater.inflate(R.layout.custom_webview, this); 
     view.getSettings().setJavaScriptEnabled(true) ; 
     view.getSettings().setUseWideViewPort(true); 
     view.getSettings().setLoadWithOverviewMode(true); 
     view.getSettings().setDomStorageEnabled(true); 
     return view; 
    } 
} 

custom_webview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <WebView 
     android:id="@+id/custom_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

MainActivity:

public class MainActivity extends AppCompatActivity { 

    MyWebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mWebView = new MyWebView(MainActivity.this); 
    mWebView = mWebView.initView(MainActivity.this); 
    mWebView = (MyWebView) findViewById(R.id.web_view); 

    } 
    @Override 
    protected void onResume() { 
    mWebView.loadUrl("https://www.google.com/"); 
    } 

} 

main_activity.xml:

<com.mypack.webview.MyWebView 
     android:id="@+id/web_view" 
     android:layout_below="@+id/start_URL" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
+0

でそれを呼び出しますか –

+0

は、私は、私はMainActivityに<:layout_width = "wrap_content" アンドロイド:layout_height = "wrap_content" アンドロイド:テキストは= "START" アンドロイド:ID = "@ + ID/START_URL" /ボタン アンドロイド>のボタンを持っていると思うん – Delphian

+0

layout_below属性を削除してみることができますか? –

答えて

1

あなたはおそらく、あなたの "MyWebView" クラスを書き換える必要があります。メソッド "initView"は毎回新しいMyWebViewオブジェクトを生成しますが、MainActivityには決して接続されません。これはあなたがそれを見ない理由かもしれません。

たぶん、あなたは多分この1つは、高さmatch_parentで、layout_below = "@のID/START_URL" と言う?(未テスト)

public class MyWebView extends WebView { 

     public MyWebView(Context context) { 
      super(context); 
      initView(context); 
     } 

     public MyWebView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      initView(context); 

     } 

     private void initView(Context context){ 
      // i am not sure with these inflater lines 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      // you should not use a new instance of MyWebView here    
      // MyWebView view = (MyWebView) inflater.inflate(R.layout.custom_webview, this); 
      this.getSettings().setJavaScriptEnabled(true) ; 
      this.getSettings().setUseWideViewPort(true); 
      this.getSettings().setLoadWithOverviewMode(true); 
      this.getSettings().setDomStorageEnabled(true); 

     } 
    } 

のようなものを試してみて、

public class MainActivity extends AppCompatActivity { 

     MyWebView mWebView; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mWebView = (MyWebView) findViewById(R.id.web_view); 

     } 
     @Override 
     protected void onResume() { 
     mWebView.loadUrl("https://www.google.com/"); 
     } 

} 
+1

ありがとうございました!これは、mWebView =(MyWebView)findViewById(R.id.web_view)という行を使用すると動作しますが、mWebView = new MyWebView(MainActivity.this)は機能しません。 – Delphian

+0

承認していただきありがとうございます。すぐにコードをもう一度更新します –

関連する問題