将 AdBlock 添加到布局 Android

Adding AdBlock to Layout Android

我是 android 开发新手,所以向您寻求帮助。

我有这样的代码:

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

<LinearLayout android:layout_width="fill_parent"
    android:id="@+id/home_layout"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_above="@+id/adView">
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:id="@+id/progressBar" />
</LinearLayout>

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>

</LinearLayout>

按照我的逻辑,AdBlock 应该显示在视图的底部。但就我而言,它根本没有出现。如果我在 LinearLayout 内通过 Ad 的标记,它会使我的 VM 崩溃。

我做错了什么?提前谢谢你

UPD:Javaactivity

public class PddViewActivity extends ActionBarActivity{

private WebView webView;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pdd_view);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    String file = getIntent().getStringExtra("file");

    webView = (WebView) findViewById(R.id.webview);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);


    webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            Log.i("PROGRESS IS :", newProgress+"");
            progressBar.setProgress(newProgress);
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(getApplicationContext(), "Error: " + description + " " + failingUrl, Toast.LENGTH_LONG).show();
        }

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        public void onPageFinished(WebView view, String url) {
            if (progressBar.getVisibility() == WebView.VISIBLE) {
                progressBar.setVisibility(WebView.GONE);
            }
        }
    });

    webView.loadUrl(String.format("file:///android_asset/html/%s", file));

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}
}

在你的 PddViewActivity.java 中尝试使用它:

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

private WebView webView;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pdd_view);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //instaciate AdView
    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

progressBar = (ProgressBar) findViewById(R.id.progressBar);

String file = getIntent().getStringExtra("file");

webView = (WebView) findViewById(R.id.webview);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);


webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        Log.i("PROGRESS IS :", newProgress+"");
        progressBar.setProgress(newProgress);
    }
});

webView.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Toast.makeText(getApplicationContext(), "Error: " + description + " " + failingUrl, Toast.LENGTH_LONG).show();
    }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    public void onPageFinished(WebView view, String url) {
        if (progressBar.getVisibility() == WebView.VISIBLE) {
            progressBar.setVisibility(WebView.GONE);
        }
    }
});

webView.loadUrl(String.format("file:///android_asset/html/%s", file));

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        onBackPressed();
        return true;
}
return super.onOptionsItemSelected(item);
    }
}

您的问题是 home_layoutlayoutHeightmatch_parent,这意味着它将占用其父项的所有高度,为您留下 none adView。

而是使用 wrap_content 并指定 android:layoutWeight="1" 以告诉它消耗所有未使用的 space。例如

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

<LinearLayout 
    android:id="@+id/home_layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:id="@+id/progressBar" />
</LinearLayout>

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>

</LinearLayout>

另请注意:

  1. layout_above 除了在 relative_layout.
  2. 内没有任何意义
  3. fill_parent 已弃用,请改用 match_parent
  4. 您的 WebView 也遇到了同样的问题。