Ich versuche, die Breite und Höhe einer Ansicht im Code festzulegen, um eine Anzeige für eine kostenlose App zu schalten, an der ich arbeite. Die gesamte Benutzeroberfläche wird mit Ausnahme dieser Anzeige in XML erstellt. Hier ist der Code, der die Anzeige anzeigt. Es ist in 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);
Dies führt dazu, dass die Anzeige so angezeigt wird. Wie Sie sehen, füllt die Breite nicht die gesamte Seite aus.
Wenn ich nun den Code in diesen ändere, um zu versuchen, die Größe einzustellen:
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);
Ich verstehe das:
Ich habe alle verschiedenen Kombinationen von FILL_PARENT
und WRAP_CONTENT
alle mit dem gleichen Ergebnis ausprobiert . Fehlt mir etwas? Oder auf andere Weise kann ich die Anzeige die Breite des Geräts ausfüllen lassen, ohne die Höhe auszufüllen? Anregungen und Hilfe wird sehr geschätzt.
BEARBEITEN Wenn ich versuche, es in XML einzufügen, erhalte ich eine Ausnahme:
<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
quelle
mContext.getResources().getDisplayMetrics().widthPixels*3/4
Antworten:
Mit diesem Code können Sie das Banner bis zur maximalen Breite füllen und das Verhältnis beibehalten. Dies funktioniert nur im Hochformat. Sie müssen die Anzeige neu erstellen, wenn Sie das Gerät drehen. Im Querformat sollten Sie die Anzeige einfach so lassen, wie sie ist, da sie ziemlich groß und unscharf ist.
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); double ratio = ((float) (width))/300.0; int height = (int)(ratio*50); AdView adView = new AdView(this,"ad_url","my_ad_key",true,true); LinearLayout layout = (LinearLayout) findViewById(R.id.testing); mAdView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT,height)); adView.setAdListener(this); layout.addView(adView);
quelle
Sie können den folgenden Code verwenden, wenn Sie nur einen bestimmten Wert beeinflussen und andere nicht berühren müssen:
view.getLayoutParams().width = newWidth;
quelle
im Code unter der folgenden Zeile hinzufügen:
spin27.setLayoutParams(new LinearLayout.LayoutParams(200, 120));
quelle
yourView.setLayoutParams(new LinearLayout.LayoutParams(width, height));
quelle
hsThumbList.setLayoutParams(new LayoutParams(100, 400));
quelle
Der erste Parameter für LayoutParams ist die Breite und der zweite die Höhe. Wenn Sie also möchten, dass die Breite FILL_PARENT, aber die Breite beispielsweise 20 Pixel beträgt, verwenden Sie etwas Neues LayoutParams (FILL_PARENT, 20). Natürlich sollten Sie niemals tatsächliche Pixel in Ihrem Code verwenden. Sie müssen das in dichteunabhängige Pixel umwandeln, aber Sie haben die Idee. Außerdem müssen Sie sicherstellen, dass Ihr übergeordnetes LinearLayout die richtige Breite und Höhe hat, die Sie suchen. Scheint so, als ob Sie möchten, dass das LinearLayout das übergeordnete Layout in der Breite ausfüllt und dann das Adview dieses Linearlayout auch in Bezug auf die Breite ausfüllt. Daher müssen Sie wahrscheinlich android: layout_width: "fill_parent" und android: layout_height: "wrap_content" angeben XML Ihres linearen Layouts.
quelle
Überprüfen Sie es im mdpi-Gerät. Wenn die Anzeige korrekt angezeigt wird, sollte der Fehler in der Konvertierung von "px" in "dip" liegen.
quelle