Android Layout, view height is equal to screen siz

2019-05-18 12:15发布

问题:

in Android how to make a view have same height as its screen size, is it possible to achieve this with only the xml? or if it must use script, tell me how

Thanks.


Sorry for being not clear, and thanks for your reply

but i think, match_parent and fill_parent attribute is not reliable, because when i put the view inside one container or change the view container hierarchy, it won't work.

Here my complete xml layout.

The element i want to make the height sam with device screen is the last list view inside relative layout

回答1:

No you cannot achieve this in XML only.

As android support multiple screen sizes, At runtime you need to check for each device , the height for each device can be calculated like this

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = size.y;

With above code you will get the height of screen and you need to set this height in dp to your view at runtime.

Do this in your activity

        // get view you want to resize
        LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main); 

        // get layout parameters for that view
        ViewGroup.LayoutParams params = mainLayout.getLayoutParams();

        // change height of the params e.g. 480dp
        params.height = 480;

        // initialize new parameters for my element
        mainLayout.setLayoutParams(new LinearLayout.LayoutParams(params));


回答2:

We can dynamically get device screen height and set as view height



回答3:

Display screenDisplay = getActivity().getWindowManager().getDefaultDisplay();
LayoutHeight = screenDisplay.getHeight();
LinearLayout.LayoutParams listLayoutParams = new LinearLayout.LayoutParams(
                    LayoutHeight, LinearLayout.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(listLayoutParams);


回答4:

use

android:layout_height = "match_parent"

instead of

android:layout_height = "wrap_content"


回答5:

This can be possible from xml layout. To do this make the parent layout height and width fill_parent or match_parent and then set each child view width fill_parent or match_parent. Don't set any padding or margin to parent layout. Hope it will work. Here I am giving you an example:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn_swap"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Left or Right" />

    <SurfaceView
        android:id="@+id/my_surface"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

Attention: If you use ScrollView, you have to set fillViewport="true" otherwise it will not work. A Google engineer said about it before. Check it from here