2015-11-04 1 views
0

У меня есть относительный макет и вы хотите поместить вид (вид AdMob) в нижней части макета. Это прекрасно работает, например, так:Изменение видимости представлений в нижней части относительной компоновки

enter image description here

Теперь, если нет подключения к Интернету, я хочу, чтобы заменить вид AdMob с заполнителем ImageView. Я хочу сделать это, установив видимость вида AdMob в GONE и установив видимость ImageView в VISIBLE. Но результат не выглядит право - ImageView теперь сверху красные и зеленые части, как показано ниже:

enter image description here

Вот код макета XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="@dimen/activity_margin" 
    android:orientation="vertical" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/app_bar_main"> 

    <LinearLayout 
     android:id="@+id/main" 
     android:layout_above="@id/ad_view" 
     android:layout_alignParentTop="true" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <LinearLayout 
      android:background="#AA9999" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="LEFT SIDE" 
       /> 

      <TextView 
       android:text="some long text here" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

     <View 
      android:layout_width="@dimen/activity_margin" 
      android:layout_height="match_parent" /> 

     <LinearLayout 
      android:background="#99AA99" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="RIGHT SIDE" /> 

      <TextView 
       android:text="MORE LONG TEXT HERE" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

    </LinearLayout> 

    <com.google.android.gms.ads.AdView 
     android:id="@+id/ad_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     android:visibility="gone" 
     app:adSize="BANNER" 
     app:adUnitId="@string/banner_ad_unit_id"> 
    </com.google.android.gms.ads.AdView> 

    <ImageView 
     android:background="#000000" 
     android:id="@+id/ad_placeholder" 
     android:src="@drawable/ad_placeholder" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     android:visibility="visible" /> 

</RelativeLayout> 

Я пытался поставить как представление ImageView, так и AdMob в одном линейном макете (назовем этот нижний линейный макет), а основной линейный макет (@ id/main) использует «layout_above» в нижней линейной компоновке. Но код не будет компилироваться.

Любые предложения?

+0

отдавания ширина затруднительного к вашему ImageView не wrap_content –

ответ

1
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_margin="10dp" 
       android:orientation="vertical" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       tools:showIn="@layout/app_bar_main"> 

    <!--Using relative layout to get the ad align property, could not get linear layout to work properly.--> 

    <LinearLayout 
     android:id="@+id/main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/adMob_container_my" 
     android:layout_alignParentTop="true" 
     android:orientation="horizontal"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:background="#AA9999" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="LEFT SIDE" 
       /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="some long text here"/> 

     </LinearLayout> 

     <View 
      android:layout_width="10dp" 
      android:layout_height="match_parent"/> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:background="#99AA99" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="RIGHT SIDE"/> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="MORE LONG TEXT HERE"/> 

     </LinearLayout> 

    </LinearLayout> 

    <RelativeLayout 
     android:id="@+id/adMob_container_my" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:orientation="horizontal"> 

     <com.google.android.gms.ads.AdView 
      android:id="@+id/ad_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:visibility="invisible" 
      app:adSize="BANNER"> 
     </com.google.android.gms.ads.AdView> 

     <ImageView 
      android:id="@+id/ad_placeholder" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:background="#000000" 
      android:src="@drawable/ic_pango_logo_title" 
      android:visibility="visible"/> 

    </RelativeLayout> 


</RelativeLayout> 

вы забыли знак «+» здесь: android:layout_above="@+id/adMob_container_my"

+0

Спасибо, но когда я составил код, я получаю сообщение об ошибке: Ошибка: (17 , 32) Ресурс не найден, который соответствует указанному имени (в 'layout_above' со значением '@ id/adMob_container'). Я использую Android Studio 1.4.1 для таргетинга SDK 23 и min SDK 16. – henry000

+0

Отредактировано решение –

+0

Да, я просто понял это в то же время! Благодарю. Ответ принят. – henry000