studio soporte resolucion programacion para pantallas pantalla móviles multiples layouts diferentes desarrollo curso aplicaciones aplicacion adaptar android layout resize android-linearlayout

soporte - Android: Cómo establecer programáticamente el tamaño de un diseño



programacion android pdf 2018 (4)

Como parte de una aplicación de Android, estoy creando un conjunto de botones. Los botones son parte de un conjunto anidado de LinearLayouts. Utilizando el peso, tengo el ajuste del tamaño automáticamente en función del tamaño del elemento principal lineal LinearLayout. La idea es, en función del número de píxeles y la densidad de la pantalla, establecer el tamaño del diseño que lo contiene en varios píxeles; y hacer que el botón se ajuste el tamaño según ese cambio.

La pregunta es: cómo cambiar el tamaño del diseño.

He intentado varias técnicas sugeridas, y ninguna está cerca de funcionar. Aquí hay un subconjunto del XML que crea el conjunto de botones:

<LinearLayout android:layout_height="104pt" android:id="@+id/numberPadLayout" android:orientation="horizontal" android:layout_width="104pt" android:background="#a0a0a0" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" > <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_width="wrap_content"> <Button android:text="1" android:id="@+id/button1" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="4" android:id="@+id/button4" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="7" android:id="@+id/button7" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="-" android:id="@+id/buttonDash" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout> <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout2" android:orientation="vertical" android:layout_width="wrap_content"> <Button android:text="2" android:id="@+id/button2" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="5" android:id="@+id/button5" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="8" android:id="@+id/button8" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="0" android:id="@+id/button0" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout> <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout3" android:orientation="vertical" android:layout_width="wrap_content"> <Button android:text="3" android:id="@+id/button3" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="6" android:id="@+id/button6" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="9" android:id="@+id/button9" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="." android:id="@+id/buttonDot" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout> <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout4" android:orientation="vertical" android:layout_width="wrap_content"> <Button android:text="/" android:id="@+id/buttonBack" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> <Button android:text="/" android:id="@+id/buttonEnter" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout> </LinearLayout>

Las dos preguntas son: 1) cómo obtengo acceso a numberPadLayout desde Java. Y una vez que tengo acceso a la vista, 2) cómo cambio la altura y el ancho del diseño.

Cualquier sugerencia será apreciada.


Esto debería funcionar:

// Gets linearlayout LinearLayout layout = findViewById(R.id.numberPadLayout); // Gets the layout params that will allow you to resize the layout LayoutParams params = layout.getLayoutParams(); // Changes the height and width to the specified *pixels* params.height = 100; params.width = 100; layout.setLayoutParams(params);

Si quiere convertir la inmersión a píxeles, use esto:

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());


Puede obtener la altura real del diseño llamado con este código:

public int getLayoutSize() { // Get the layout id final LinearLayout root = (LinearLayout) findViewById(R.id.mainroot); final AtomicInteger layoutHeight = new AtomicInteger(); root.post(new Runnable() { public void run() { Rect rect = new Rect(); Window win = getWindow(); // Get the Window win.getDecorView().getWindowVisibleDisplayFrame(rect); // Get the height of Status Bar int statusBarHeight = rect.top; // Get the height occupied by the decoration contents int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop(); // Calculate titleBarHeight by deducting statusBarHeight from contentViewTop int titleBarHeight = contentViewTop - statusBarHeight; Log.i("MY", "titleHeight = " + titleBarHeight + " statusHeight = " + statusBarHeight + " contentViewTop = " + contentViewTop); // By now we got the height of titleBar & statusBar // Now lets get the screen size DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int screenHeight = metrics.heightPixels; int screenWidth = metrics.widthPixels; Log.i("MY", "Actual Screen Height = " + screenHeight + " Width = " + screenWidth); // Now calculate the height that our layout can be set // If you know that your application doesn''t have statusBar added, then don''t add here also. Same applies to application bar also layoutHeight.set(screenHeight - (titleBarHeight + statusBarHeight)); Log.i("MY", "Layout Height = " + layoutHeight); // Lastly, set the height of the layout FrameLayout.LayoutParams rootParams = (FrameLayout.LayoutParams)root.getLayoutParams(); rootParams.height = layoutHeight.get(); root.setLayoutParams(rootParams); } }); return layoutHeight.get(); }


mi código de muestra

wv = (WebView) findViewById(R.id.mywebview); wv.getLayoutParams().height = LayoutParams.MATCH_PARENT; // LayoutParams: android.view.ViewGroup.LayoutParams // wv.getLayoutParams().height = LayoutParams.WRAP_CONTENT; wv.requestLayout();//It is necesary to refresh the screen


LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout) LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( /*width*/ ViewGroup.LayoutParams.MATCH_PARENT, /*height*/ 100, /*weight*/ 1.0f ); YOUR_LinearLayout.setLayoutParams(param);