Vue D'Ensemble De La Largeur Par Programmation
Je suis en train de définir la largeur et la hauteur de vue dans le code pour afficher de la publicité pour une application gratuite, je suis en train de travailler sur. L'ensemble de l'INTERFACE utilisateur se fait en XML à l'exception de cette annonce. Voici le code qui affiche l'annonce. C'est dans onCreate
.
AdView adView = new AdView(this,"ad_url","my_ad_key",true,true);
LinearLayout layout = (LinearLayout) findViewById(R.id.testing);
adView.setAdListener(this);
layout.addView(adView);
Cette résultats dans l'annonce affichée comme ceci. Comme vous pouvez le voir, la largeur n'est pas tout à fait remplir la page entière.
Maintenant, quand je change le code de cette tentative de définir la taille:
AdView adView = new AdView(this,"ad_url","my_ad_key",true,true);
LinearLayout layout = (LinearLayout) findViewById(R.id.testing);
adView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
adView.setAdListener(this);
layout.addView(adView);
J'obtiens ceci:
J'ai essayé toutes les différentes combinaisons de FILL_PARENT
et WRAP_CONTENT
tous avec le même résultat. Est-il quelque chose que je suis absent? Ou un autre moyen que je peux avoir l'annonce remplir la largeur de l'appareil sans remplissage de la hauteur? Toutes les suggestions et de l'aide est grandement appréciée.
MODIFIER quand j'ai essayer de le mettre en XML, j'obtiens une exception:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/main_layout">
<fragment
android:name="com.jasoncrosby.app.tipcalculatorfree.MainButtonFragment"
android:id="@+id/button_frag"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<com.adsdk.sdk.banner.AdView
android:id="@+id/banner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
> 09-09 22:39:43.448: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jasoncrosby.app.tipcalculatorfree/com.jasoncrosby.app.tipcalculatorfree.MainActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class com.adsdk.sdk.banner.AdView
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread.access$1500(ActivityThread.java:122)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:132)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4025)
09-09 22:39:43.448: E/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)
09-09 22:39:43.448: E/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:491)
09-09 22:39:43.448: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-09 22:39:43.448: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-09 22:39:43.448: E/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)
09-09 22:39:43.448: E/AndroidRuntime(586): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class com.adsdk.sdk.banner.AdView
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.createView(LayoutInflater.java:579)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:671)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
09-09 22:39:43.448: E/AndroidRuntime(586): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:223)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.Activity.setContentView(Activity.java:1780)
09-09 22:39:43.448: E/AndroidRuntime(586): at com.jasoncrosby.app.tipcalculatorfree.MainActivity.onCreate(MainActivity.java:95)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712)
09-09 22:39:43.448: E/AndroidRuntime(586): ... 11 more
09-09 22:39:43.448: E/AndroidRuntime(586): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
09-09 22:39:43.448: E/AndroidRuntime(586): at java.lang.ClassMembers.getConstructorOrMethod(ClassMembers.java:235)
09-09 22:39:43.448: E/AndroidRuntime(586): at java.lang.Class.getConstructor(Class.java:459)
09-09 22:39:43.448: E/AndroidRuntime(586): at android.view.LayoutInflater.createView(LayoutInflater.java:551)
09-09 22:39:43.448: E/AndroidRuntime(586): ... 21 more
- Juste une suggestion: Pourquoi ne pas ajouter la Vue que vous souhaitez en xml (chemin d'accès complet de la classe comme com.les annonces.AdView - je viens de faire ce chemin, mais vous obtenez le point), puis accéder à votre Activité avec findViewById(), et faire ce que vous voulez avec elle?
- J'ai ajouté ce qui se passe quand je l'ai mis au format XML dans l'édition.
mContext.getResources().getDisplayMetrics().widthPixels*3/4
Vous devez vous connecter pour publier un commentaire.
Ce code permet de remplir la bannière de la largeur maximale et de garder les proportions.
Cela ne fonctionnera que dans le portrait. Vous devez recréer l'annonce lorsque vous faites pivoter l'appareil.
En mode paysage, vous devez juste laisser l'annonce est parce qu'il sera assez grand, un flou.
Vous pouvez utiliser quelque chose comme le code ci-dessous, si vous avez besoin d'affecter seulement valeur spécifique, et de ne pas toucher les autres:
dans le code ajouter la ligne ci-dessous:
Le premier paramètre à LayoutParams est la largeur et la deuxième est à la hauteur. Donc, si vous voulez la largeur à FILL_PARENT, mais la largeur d'être, disons, de 20px, puis utilisez quelque chose de nouveau LayoutParams(FILL_PARENT, 20). Bien sûr, vous ne devriez jamais utiliser de pixels réels dans votre code, vous aurez besoin de conversion que pour indépendante de la densité de pixels, mais vous obtenez l'idée. Aussi, vous devez vous assurer que votre parent LinearLayout a le droit de la largeur et de la hauteur que vous cherchez. Me semble que vous voulez le LinearLayout pour remplir le parent sur la largeur, puis le adview remplir que linearlayout largeur-sage, donc vous avez probablement besoin de spécifier android:layout_width:"fill_parent" et android:layout_height:"wrap_content" dans votre linéaire du modèle xml.
vérifier dans mdpi appareil.. Si l'annonce s'affiche correctement, l'erreur doit être en "px" pour "chute" de conversion..