Как я могу создать представление и установить атрибуты в 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);