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

Como parte de una aplicación de Android, estoy creando un conjunto de botones. Los botones son parte de un conjunto nested 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:

                        

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, , getResources().getDisplayMetrics()); 

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 

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