Android: как программно установить размер макета

Как часть приложения для Android, я создаю набор кнопок. Кнопки являются частью вложенного набора LinearLayouts. Используя вес, я автоматически установил размер, основанный на размере содержащего родителя LinearLayout. Идея основана на подсчете пикселей и плотности экрана, чтобы установить размер содержащего макета на несколько пикселей; и на основе этого изменения кнопка изменит размер.

Тогда возникает вопрос: как resize макета.

Я попробовал несколько предложенных методов, и никто не приблизился к работе. Вот подмножество XML, который строит набор кнопок:

                        

Два вопроса: 1) как получить доступ к numberPadLayout с Java. И как только я получаю доступ к просмотру, 2) как изменить высоту и ширину макета.

Любые предложения будут оценены.

Это должно работать:

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

Если вы хотите преобразовать dip в пиксели, используйте это:

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

мой пример кода

 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 

Вы можете получить фактическую высоту вызываемого макета с помощью этого кода:

 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); 
  • Просмотр Rerender при изменении размера браузера с помощью React
  • jQuery Animation - плавный переход по размеру
  • Как автоматическое изменение размера и настройка элементов управления формы с изменением разрешения
  • Как resize изображения C #
  • Интуиция и идея перестройки 4D-массива в 2D-массив в NumPy
  • Давайте будем гением компьютера.