2013-12-15 3 views
0

Я только начал с разработки Android и столкнулся с проблемой, о которой я не могу найти. Я создал проект с использованием двухпанельного шаблона. Я смог добавить AdView и многие другие виды в мое приложение, находясь в двухпанельном режиме (activity_setting_twopane.xml). Где я борюсь за то, как добавить представление (любое) к другому макету для более мелких дисплеев (activity_setting_detail.xml, activity_setting_list.xml или fragment_setting_detail.xml?). Я был в состоянии добавить представление (AdView) для fragment_setting_detail.xmlДобавление вида в xml-фрагмент в Android

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/setting_list" 
    android:name="com.test.firstapp.SettingListFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    tools:context=".SettingListActivity" 
    tools:layout="@android:layout/list_content" > 

    <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="xxxxxxxxxxxxxxxxx" > 
    </com.google.android.gms.ads.AdView> 

</fragment> 

Я думаю, что это не правильный путь, но только один, который работает прямо сейчас. Но AdView отображается в верхней части экрана, и я понятия не имею, как разместить его, потому что в Fragments большинство параметров arent разрешено использовать. Я даже пытался обернуть его в LinearLayout, но затем сбой образца проекта, где я хочу добавить представление в макет кода. Каков правильный способ добавления любых представлений в xml на основе Fragments (используя образец, чтобы я понял)? Многие ТНХ заранее

+0

Вы пытались установить гравитацию в свой «AdView» как: 'android: layout_gravity: bottom'? – Fllo

+0

Да, я пробовал раньше, добавив андроид: layout_gravity = "bottom", но его тоже не работает. Он остается наверху. – Digit

+0

Попробуйте добавить 'layout_weight' с' weightSum' в родительский. Или попробуйте метод RelativeLayout. См. Мой ответ на вопрос ниже. – Fllo

ответ

1

Правильный способ сделать это:

<!-- assign a layout_gravity to your Views --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".SettingListActivity" 
    tools:layout="@android:layout/list_content" 
    android:orientation="vertical" > 

    <fragment 
     android:id="@+id/setting_list" 
     android:name="com.test.firstapp.SettingListFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" /> 

    <com.google.android.gms.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="480dp" 
     android:layout_height="75dp" 
     ads:adSize="BANNER" 
     ads:adUnitId="xxxxxxxxxxxxxxxxx" 
     android:layout_gravity="bottom" /> 

</LinearLayout> 

Примечание:
Не путайте android:gravity и android:layout_gravity.

android:gravity Присвоить гравитацию «детям».
android:layout_gravity> Присвоить гравитацию «родительскому».
Смотрите этот ответ для более подробной информации: Android - gravity and layout_gravity

Edit:
FYI: а ViewGroup является:

«Специальный вид, который может содержать другие взгляды (. Наречены сынами) Вид группа базовый класс для макетов и видов контейнеров. " ссылка: ViewGroup Android Developer Documentation

Ваш fragment не может быть родителем для AdView, вам нужен «родительский вид» как LinearLayout, RelativeLayout, AbsoluteLayout (устаревшее), TableLayout и т.д.

И ваш AdView не удалось, потому что вы должны чтобы присвоить ему значение ширины/высоты, как вы можете здесь: AdView failed to instantiate. Также читать: com.google.ads.AdView failed to instantiate

Надеюсь, что это поможет.

+0

Спасибо, что работает. Может быть, я действительно использовал другой параметр гравитации :) – Digit

+0

Я думаю, что 'layout_gravity' в мульти-панели также работает. Это точно так же.(Добро пожаловать) – Fllo

+0

В многоуровневой панели я смог использовать относительный макет, поэтому у меня нет никаких проблем. Я просто пытаюсь добавить макет к фрагменту_setting_detail.xml, потому что тогда код вылетает при вызове MyadView.loadAd (adRequest); Btw: Приведенный выше код вызывает две ошибки в Eclipse ADT при переключении на конструктор макетов «activity_setting_list.xml: com.android.layoutlib.bridge.MockView не может быть добавлен в android.view.ViewGroup» и «com.google.android» .gms.ads.AdView не удалось создать экземпляр. " Но он работает – Digit

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