2017-01-05 3 views
3

У меня много WebView в разных частях программы, но эти WebViews не отличаются друг от друга, поэтому я хочу создать собственный 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

вы говорите layout_below = "@ идентификатор/START_URL", может быть, это одна по высоте match_parent? –

+0

Я думаю, что нет, у меня есть кнопка в MainActivity

+0

вы можете попробовать удалить атрибут layout_below, что происходит потом? –

ответ

1

Вы, вероятно, следует переписать класс "MyWebView". Ваш метод initView генерирует новый объект MyWebView каждый раз, но он никогда не подключается к вашему MainActivity. Вот почему вы этого не видите.

Может быть, попробовать что-то вроде (непроверенных)

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 = новый MyWebView (MainActivity.this) не работает! – Delphian

+0

Благодарим за принятие, я скоро обновлю код –

Смежные вопросы