2012-03-24 1 views
1

У меня возникли проблемы с установкой правильного положения объявлений из admob. Я установил специальную разметку для этого объявленияAndroid admob view set, ориентированный независимо от ориентации

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:id="@+id/main_layout_ads"> 
</LinearLayout> 

и определенных объявления следующего

adView = new AdView(this, AdSize.BANNER, AD_UNIT_ID); 
LinearLayout layout = (LinearLayout)findViewById(R.id.main_layout_ads); 
adView.setGravity(Gravity.CENTER_HORIZONTAL); 
layout.addView(adView, 0); 
adView.loadAd(new AdRequest()); 

Проблема возникает, когда я установил реальное устройство (HTC Wildfire) и изменить ориентацию. Все изменения приложения соответственно, но объявление остается в левом верхнем углу, а не beign на верхнем центре, как я желаю.

Любой может дать мне какие-либо сведения о том, как это сделать?

ответ

1

Попробуйте изменить/добавление гравитации = "горизонтальный"

ИЛИ

Попробуйте положить вид AdMob в RelativeLayout вместо LinearLayout. В этом примере представление AdMob добавляется динамически по коду. Это сработало для меня!

 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 

     RelativeLayout layout = (RelativeLayout)findViewById(R.id.ad_layout_blank); // this is the RelativeLayout 
     layout.setGravity(Gravity.CENTER_HORIZONTAL); 
     layout.addView(adView, layoutParams); 
     layout.invalidate(); 

XML макет:

 <RelativeLayout android:id="@+id/ad_layout_blank" 
      android:layout_width="fill_parent" android:layout_height="50dp" 
      android:layout_gravity="center_horizontal" 
      android:gravity="center_horizontal" 
      android:visibility="visible" 
     /> 
+0

тысяча поблагодарить человека. Он работал правильно. Не знаю, почему относительная компоновка делает работу и linearlayout нет, но это все. – user989501

+0

Добро пожаловать! Поэтому, пожалуйста, установите ответ как принятый. ура – Lisitso

0

Таким образом, вы знаете, проблема заключалась в том, что вы установили layout_gravity на LinearLayout, и сила тяжести на AdView.

Разница заключается в том, что layout_gravity для самого представления внутри своего родителя, а сила тяжести - для дочерних элементов в макете.

Таким образом, если вы использовали гравитацию = «center_horizontal» для LinearLayout или предоставили LinearLayout.LayoutParams AdView LinearLayout.LayoutParams и задали серьезность параметров макета для center_horizontal (что эквивалентно layout_gravity в XML) для AdView, то это сработало бы , Но я получил их обоих назад.

Надеюсь, что это имело смысл - вам не нужна относительная компоновка, чтобы что-то центрировать.