Как я могу создать представление и установить атрибуты в Android с помощью кода?

Вот мой макет

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <com.mopub.mobileads.MoPubView
        android:id="@+id/adview"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        />

</RelativeLayout>

Я интегрирую MoPub SDK в мою игру libGDX, и в документации MoPub они говорят о создании MopubView в layout.xml, как показано выше. А затем сделайте следующее:

moPubView = (MoPubView) findViewById(R.id.adview);
moPubView.setAdUnitId("xxxxxxxxxxx"); // Enter your Ad Unit ID from www.mopub.com
moPubView.loadAd();
RelativeLayout layout = new RelativeLayout(this);

// Create the libgdx View
View gameView = initializeForView(new TBGame(this), config);

// Add the libgdx view
layout.addView(gameView);
layout.addView(moPubView)

setContentView(layout);

Но libGDX не будет загружать мой xml-файл, так как он в этом не нуждается, что приводит к исключению нулевого указателя, когда выполнение достигает вышеуказанной строки. Таким образом, решение, кажется, создает представление из кода? Как я могу это сделать? Очень похожий вопрос здесь: интеграция рекламы Mopub в Cocos2dx 2.1, но заявленное решение НЕ подходит для последней версии MoPub SDK.

Изменить: это класс MoPubView https://github.com/mopub/mopub-android-sdk/blob/master/mopub-sdk/src/main/java/com/mopub/mobileads/MoPubView.java

Приложение: Часть трассировки стека, прикрепленная здесь:Трассировки стека

2 ответа

Если ваш вызов findViewById находится в действии, вам нужно вызвать setContentView с макетом в onCreate: setContentView(R.layout.layout); (кстати, попробуйте более описательное имя)

в противном случае - для загрузки динамически смотрите там: Как загрузить макет в коде из XML-файла и просто использовать результирующее представление по вашему желанию, возможно, что-то вроде view.findViewById

Вам нужно сделать что-то вроде этого:

    setContentView(relativeLayout);
    RelativeLayout relativeLayout = new RelativeLayout(this);
    relativeLayout.addView(yourchildView);
Другие вопросы по тегам