2012-09-09 18 views
42

私が取り組んでいる無料のアプリの広告を表示するために、コードのビューの幅と高さを設定しようとしています。すべてのUIはこの広告を除いてXMLで行われます。広告を表示するコードは次のとおりです。それは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); 

この結果、広告はこのように表示されます。あなたが見ることができるように、幅はページ全体をいっぱいにしません。私はこれを取得

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); 

は、今私はサイズを設定しようとするこれにコードを変更するとき

enter image description here

私はすべての異なる組み合わせを試してみましたFILL_PARENTおよびWRAP_CONTENTのすべてが同じ結果を示した。私が紛失しているものはありますか?または、別の方法で、私は広告の高さを埋めることなく、デバイスの幅を埋めることができますか?どんな提案や助けも大歓迎です。

EDIT私はXMLに入れしようとしたとき、私は例外を取得:

<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 
+0

ちょっとした提案:xmlに必要なビュー(com.ads.AdViewのようなフル・クラスのパス - 私はこのパスを作成しましたが、そのポイントを得ました)を追加してから、アクティビティでfindViewById()、それに何でもしたいですか? –

+0

編集時にXMLに入れたときに何が起こるかを追加しました。 –

+0

'mContext.getResources()。getDisplayMetrics()。widthPixels * 3/4' –

答えて

49

このコードでは、バナーを最大幅で塗りつぶして比率を維持できます。 これはポートレートでのみ機能します。デバイスを回転させるときは、広告を再作成する必要があります。 風景では、かなりぼやけているのでそのまま広告を残してください。

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); 
+6

FILL_PARENTは推奨されません。新しいSDK – penduDev

+2

でMATCH_PARENTを使用してください。Display.getWidth()も非推奨です。代わりにgetSize()を使用してください。 – Majestic

0

LayoutParamsへの最初のパラメータは幅であり、第二の高さです。したがって、幅をFILL_PARENT、幅を20pxにする場合は、新しいLayoutParams(FILL_PARENT、20)を使用します。もちろん、コード内で実際のピクセルを使用しないでください。濃度に依存しないピクセルに変換する必要がありますが、あなたはそのアイデアを得ることができます。また、親LinearLayoutの幅と高さが正しいことを確認する必要があります。 LinearLayoutが親を幅で塗りつぶして、linviewoutをwitdh-wiseで埋めるようにしたいので、おそらくandroid:layout_width: "fill_parent"とandroid:layout_height: "wrap_content"を指定する必要がありますあなたの線形レイアウトのxml。

+0

私はこれを試しましたが、私はまだ同じ結果を得ています。 –

0

...広告が正しく表示された場合、エラーは「ディップ」の変換に「PX」にする必要があります。.. MDPIデバイスのコードで

6

を、それをチェックするには、行の下に追加します。

spin27.setLayoutParams(new LinearLayout.LayoutParams(200, 120)); 
+1

これはこの質問に対する答えではないようです。 – laalto

+0

私はプログラム上でスピナーの幅を固定するのと同じような問題がありましたが、コードの上に私のために働いた。 Adviewは別のビューですので、同じものをここに適用する必要があります。実装していないが、すべてのビューアンドロイドサポートの幅を修正するのが理想的です。 – Ujjwal

53

あなたが唯一の特定の値に影響を与えるために必要がある場合は、以下のコードのようなものを使用し、他の人に触れることができない。

view.getLayoutParams().width = newWidth; 
+0

「ラップコンテンツ」はどうですか? –

+0

WRAP_CONTENT = -2という定数があります。 このview.getLayoutParams()のようなものを試すことができます。width = LayoutParams.WRAP_CONTENT; –

+1

何らかの理由でview.getLayoutParams()。width = newWidht;とsetWidthは同じ効果がありません、あなたはこの事実を説明できますか? – benchuk

0
hsThumbList.setLayoutParams(new LayoutParams(100, 400)); 
関連する問題