В рамках приложения для Android я создаю набор кнопок. Кнопки являются частью вложенного набора LinearLayouts. Используя вес, я автоматически изменяю размер набора в зависимости от размера содержащего его родителя LinearLayout. Идея состоит в том, чтобы на основе количества пикселей и плотности экрана установить размер содержащего макета в несколько пикселей; и измените размер кнопки в зависимости от этого изменения.
Тогда возникает вопрос: как изменить размер макета.
Я пробовал несколько предложенных техник, и ни один из них не подошел к работе. Вот подмножество XML, которое создает набор кнопок:
<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>
Вот два вопроса: 1) как получить доступ к numberPadLayout из Java. И когда у меня есть доступ к представлению, 2) как мне изменить высоту и ширину макета.
Любые предложения будут оценены.
источник
layout.getWidth()
, это все равно 2000, даже если я поставлюparams.width=1000
мой пример кода
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
источник
requestLayout()
сделал это для меня!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);
источник
Вы можете получить фактическую высоту вызываемого макета с помощью этого кода:
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(); }
источник