Establecer la anchura de vista mediante programación
Estoy intentando establecer el ancho y la altura de una vista en código para mostrar un anuncio para una aplicación gratuita en la que estoy trabajando. Toda la interfaz de usuario se realiza en XML, con la excepción de este anuncio. Este es 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 este modo. Como se puede ver el ancho no llena la página entera.
- El diseño xml definido en layout-land no aparece en la aplicación android
- Obtener las dimensiones de RelativeLayout
- Autocompletetextview como una pista
- Libros sobre Android Diseño de interfaces de usuario
- Android Gridview - Linear layout_height que se ignora
Ahora cuando cambio el código a esto para intentar fijar 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
todos con el mismo resultado. ¿Hay algo que me falta? ¿O de otra manera puedo hacer que el anuncio llene el ancho del dispositivo sin llenar la altura? Cualquier sugerencia y ayuda es muy apreciada.
EDITAR cuando intento ponerlo en XML Tengo 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
- WRAP_CONTENT no funciona después de agregar vistas dinámicamente
- Cómo se pone FragmentTabhost en la parte inferior
- Android: ¿Cómo obtener sólo dos dígitos después del punto en el valor decimal? no quiere trunc el valor
- Formato correcto para android: gravedad en attrs.xml?
- Cómo cambiar el color de la actual desplazamiento en ScrollView Android?
- Quitar la casilla de verificación predeterminada del botón de radio cuando se utiliza un selector personalizado
- Reemplazar (o "Anular") cadena en el proyecto de la biblioteca de Android
- Añadir diseño como una vista en Android
Este código le permite llenar el banner con el ancho máximo y mantener la relación. Esto sólo funcionará en retrato. Debe volver a crear el anuncio cuando gira el dispositivo. En el paisaje que debe dejar el anuncio como es porque será bastante grande y borrosa.
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);
Puedes usar algo como el siguiente código, si necesitas afectar solo un valor específico, y no tocar a otros:
view.getLayoutParams().width = newWidth;
En código añadir debajo de la línea:
spin27.setLayoutParams(new LinearLayout.LayoutParams(200, 120));
El primer parámetro de LayoutParams es el ancho y el segundo es la altura. Así que si quieres que el ancho sea FILL_PARENT, pero el ancho sea, digamos, 20px, entonces usa algo nuevo LayoutParams (FILL_PARENT, 20). Por supuesto usted nunca debe utilizar píxeles reales en su código; Usted necesitará convertir eso a los pixeles independientes de la densidad, pero usted consigue la idea. Además, debe asegurarse de que su Parent LinearLayout tenga el ancho y la altura adecuados que está buscando. Parece que quieres que el LinearLayout rellene el ancho de los padres y luego que el relleno de la vista de adición sea linear también, así que probablemente necesites especificar android: layout_width: "fill_parent" y android: layout_height: wrap_content El xml de su diseño lineal.
Comprobarlo en el dispositivo mdpi .. Si el anuncio se muestra correctamente, el error debe estar en "px" a "dip" conversión ..
hsThumbList.setLayoutParams(new LayoutParams(100, 400));
: hsThumbList.setLayoutParams(new LayoutParams(100, 400));
- OnPause y OnStop () llamados inmediatamente después de iniciar la actividad
- ¿Cómo puedo obtener el menú de opciones de mi actividad?