studio programación programacion herramientas gratis fundamentos curso con avanzado aplicaciones android android-layout mobfox

programación - manual android studio avanzado



Establecer ancho de vista mediante programación (6)

El primer parámetro para LayoutParams es el ancho y el segundo es la altura. Por lo tanto, si desea que el ancho sea FILL_PARENT, pero el ancho sea, digamos, 20px, utilice algo nuevo LayoutParams (FILL_PARENT, 20). Por supuesto, nunca deberías usar píxeles reales en tu código; Tendrás que convertir eso a píxeles independientes de la densidad, pero entiendes la idea. Además, debe asegurarse de que su hijo LinearLayout tenga el ancho y alto correctos que está buscando. Parece ser que quieres que LinearLayout llene al padre en lo que respecta al ancho y luego hacer que el adview complete también esa distribución lineal, así que probablemente necesites especificar android: layout_width: "fill_parent" y android: layout_height: "wrap_content" en su diseño lineal es xml.

Estoy intentando establecer el ancho y el alto de una vista en el código para mostrar un anuncio de una aplicación gratuita en la que estoy trabajando. Toda la interfaz de usuario se realiza en XML a excepción de este anuncio. Aquí está el código que muestra el anuncio. Está en 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);

Esto hace que el anuncio se muestre de esta manera. Como puede ver, el ancho no completa toda la página.

Ahora cuando cambio el código a esto para intentar establecer el tamaño:

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

Entiendo esto:

He intentado todas las combinaciones diferentes de FILL_PARENT y WRAP_CONTENT con el mismo resultado. ¿Hay algo que este olvidando? ¿O de otra forma puedo hacer que el anuncio llene el ancho del dispositivo sin llenar la altura? Cualquier sugerencia y ayuda es muy apreciada.

EDIT cuando trato de ponerlo en XML recibo una excepción:

<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


Este código le permite llenar el banner hasta el ancho máximo y mantener la proporción. Esto solo funcionará en retrato. Debe volver a crear el anuncio cuando gira el dispositivo. En el paisaje, simplemente debe dejar el anuncio como está porque será bastante grande y borroso.

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


Puede usar algo como el siguiente código, si necesita afectar únicamente el valor específico, y no tocar otros:

view.getLayoutParams().width = newWidth;


compruébelo en el dispositivo mdpi .. Si el anuncio se muestra correctamente, el error debe estar en "px" para "sumergir" la conversión.


en el código agregar debajo de la línea:

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


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