2012-09-09 17 views
42

मैं एक निःशुल्क ऐप के लिए एक विज्ञापन दिखाने के लिए कोड में एक दृश्य की चौड़ाई और ऊंचाई सेट करने की कोशिश कर रहा हूं, जिस पर मैं काम कर रहा हूं। इस यूआई के अपवाद के साथ सभी यूआई एक्सएमएल में किया जाता है। यहां वह कोड है जो विज्ञापन प्रदर्शित करता है। यह 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 सभी एक ही परिणाम के साथ। क्या मैं कुछ छोड़ रहा हूं? या एक और तरीका है कि विज्ञापन ऊंचाई भरने के बिना डिवाइस की चौड़ाई भर सकता है? कोई भी सुझाव और सहायता सराहनीय होगी।

<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

बस एक सुझाव: आप एक्सएमएल में पूर्ण दृश्य क्यों नहीं जोड़ते हैं (com.ads.AdView जैसे पूर्ण वर्ग पथ - मैंने अभी यह पथ बनाया है, लेकिन आपको बिंदु मिल गया है), फिर इसे अपनी गतिविधि में एक्सेस करें findViewById(), और जो कुछ भी आप चाहते हैं वह करें? –

+0

मैंने जोड़ा कि जब मैं इसे संपादन में एक्सएमएल में डालता हूं तो क्या होता है। –

+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 बहिष्कृत, नए एसडीके – penduDev

+2

के साथ MATCH_PARENT का उपयोग करें Display.getWidth() भी बहिष्कृत। इसके बजाय getSize() का उपयोग करें। – Majestic

0

LayoutParams को पहले पैरामीटर चौड़ाई और दूसरा ऊंचाई है:

संपादित जब मैं XML में ठीक से रखने का प्रयास मैं एक अपवाद मिलता है। तो यदि आप चाहते हैं कि चौड़ाई FILL_PARENT हो, लेकिन चौड़ाई, कहें, 20px, तो कुछ नए लेआउटपैम (FILL_PARENT, 20) का उपयोग करें। बेशक आपको अपने कोड में वास्तविक पिक्सेल का कभी भी उपयोग नहीं करना चाहिए; आपको इसे घनत्व-स्वतंत्र पिक्सल में परिवर्तित करने की आवश्यकता होगी, लेकिन आपको विचार मिल जाएगा। साथ ही, आपको यह सुनिश्चित करने की ज़रूरत है कि आपके माता-पिता LinearLayout की सही चौड़ाई और ऊंचाई है जिसे आप ढूंढ रहे हैं। ऐसा लगता है कि आप लाइनरलायआउट को माता-पिता की चौड़ाई के अनुसार भरना चाहते हैं और फिर विज्ञापनवृत्त उस लाइनरलेआउट को बुद्धिमानी से भरें, इसलिए आपको शायद एंड्रॉइड निर्दिष्ट करना होगा: layout_width: "fill_parent" और android: layout_height: "wrap_content" आपका रैखिक लेआउट का एक्सएमएल।

+0

मैंने कोशिश की और मुझे अभी भी वही परिणाम मिल गया है। –

0

mdpi डिवाइस में यह जाँच .. विज्ञापन ठीक से दिखाई देते, त्रुटि "पिक्सल" को "डुबकी लगाना" रूपांतरण .. में होना चाहिए तो

6
कोड में

रेखा से नीचे जोड़ें:

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

यह इस प्रश्न का उत्तर नहीं लगता है। – laalto

+0

मुझे प्रोग्रामर के रूप में स्पिनर की चौड़ाई को ठीक करने में भी इसी तरह की समस्या थी लेकिन आखिरकार कोड के ऊपर मेरे लिए काम किया गया। एडव्यू एक और दृश्य है, इसलिए इसे यहां लागू किया जाना चाहिए, लागू नहीं किया गया है लेकिन आदर्श रूप से किसी भी दृश्य एंड्रॉइड समर्थन की चौड़ाई को ठीक करने के लिए काम करना चाहिए। – Ujjwal

53

आप नीचे दिए गए अगर आप केवल विशिष्ट मूल्य को प्रभावित करने की जरूरत है कोड की तरह कुछ का उपयोग कर सकते हैं, और दूसरों को नहीं छूना:

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

'रैप-कंटेंट' के बारे में क्या? –

+0

निरंतर WRAP_CONTENT = -2 है; तो आप इस दृश्य की तरह कुछ कोशिश कर सकते हैं .getLayoutParams()। Width = layoutParams.WRAP_CONTENT; –

+1

किसी कारण से view.getLayoutParams()। Width = newWidht; और सेटविड्थ का एक ही प्रभाव नहीं है, क्या आप इस तथ्य को समझा सकते हैं? – benchuk

संबंधित मुद्दे