以编程方式设置视图宽度

我正在尝试在代码中设置视图的宽度和高度,以显示我正在处理的免费应用的广告。 除了这个广告,所有的用户界面都以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); 

我得到这个:

在这里输入图像说明

我已经尝试了FILL_PARENTWRAP_CONTENT所有不同组合,结果相同。 有什么我失踪? 或者,我可以让广告填充设备的宽度而不填充高度? 任何build议和帮助,不胜感激。

编辑时,我试图把它放在XML我得到一个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 

这段代码让你把横幅填充到最大宽度并保持比例。 这将只能在肖像。 旋转设备时必须重新创build广告。 在风景中,你应该直接离开广告,因为这将是一个相当大的模糊。

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

如果您只需要影响特定的值,而不触及其他人,则可以使用下面的代码:

 view.getLayoutParams().width = newWidth; 

在代码中添加下面的行:

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

LayoutParams的第一个参数是宽度,第二个参数是高度。 所以如果你想宽度是FILL_PARENT,但宽度是20px,那么使用一些新的LayoutParams(FILL_PARENT,20)。 当然,你不应该在你的代码中使用实际的像素。 您需要将其转换为与密度无关的像素,但您明白了。 此外,你需要确保你的父母LinearLayout有正确的宽度和高度,你正在寻找。 似乎是你想要LinearLayout填充父宽度明智,然后让adview填充linearlayout witdh明智以及,所以你可能需要指定android:layout_width:“fill_parent”和android:layout_height:“wrap_content”在你的线性布局的XML。

在mdpi设备中检查它。如果广告正确显示,错误应该在“px”到“dip”转换中。

 hsThumbList.setLayoutParams(new LayoutParams(100, 400));