2015-11-16 5 views
1

Я новичок в разработке Android, поэтому прошу вас о помощи.Добавление AdBlock к компоновке 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 должна отображаться в нижней части зрения. Но в моем случае это просто не появляется вообще. Если я пропустил разметку Ad внутри LinearLayout, это дает мне сбой VM.

Что я делаю неправильно? Спасибо заранее

UPD: Java активность

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); 
} 
} 
+0

Есть ли у вас какие-либо ошибки при попытке скомпилировать? Что такое код Java, соответствующий вашей деятельности? –

+0

Каковы были инструкции Google? –

+0

Повторите действия и следуйте этим инструкциям: [AdMob QuickStart] (https://developers.google.com/admob/android/quick-start) –

ответ

1

Ваша проблема заключается в том, что home_layout имеет layoutHeight из match_parent, что означает, что он будет потребляют всю высоту своего родителя, не оставляя для вас adView.

Вместо этого используйте wrap_content и укажите android:layoutWeight="1", чтобы сказать, чтобы он использовал все неиспользованное пространство. Например

<?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. fill_parent устарел, вместо этого используйте match_parent.
  3. У вас была такая же проблема с вашим веб-интерфейсом.
+0

Это сделало трюк. Спасибо. – inffy

1

Попробовать, что в вашем 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); 
    } 
} 
+0

hehe, instactiated as You, но то же самое :(нет добавлений. – inffy

+0

Вы добавляете зависимости в конфигурационном файле Gradle? –

+1

yeap, im using ver. 7.5: compile 'com.google.android.gms: play -services-ads: 7.5.0 ' – inffy

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