6

在Android中如何使视图具有与其屏幕尺寸相同的高度,是否可以仅使用xml来实现这一点?或者如果它必须使用脚本,请告诉我如何

谢谢。


抱歉不清楚,感谢您的回复

但我认为,match_parent 和 fill_parent 属性不可靠,因为当我将视图放在一个容器中或更改视图容器层次结构时,它不起作用。

这是我完整的 xml 布局。

我想用设备屏幕制作高度的元素是相对布局中的最后一个列表视图

在此处输入图像描述

4

3 回答 3

3

不,您不能仅在 XML 中实现这一点。

由于 Android 支持多种屏幕尺寸,因此在运行时您需要检查每种设备尺寸。每个设备的高度可以这样计算:

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

使用上面的代码,您将获得屏幕的高度,您需要在运行时将dp中的此高度设置为您的视图。

在您的活动中执行此操作:

// 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));
于 2013-11-06T07:14:28.407 回答
1

这可以从xml layout. 为此,请先设置父布局的高度和宽度fill_parent or match_parent,然后设置每个子视图的宽度fill_parent or match_parent.。不要将任何padding or margin设置为父布局。希望它会奏效。这里我给你举个例子:

<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>

注意:如果使用ScrollView,则必须设置,fillViewport="true"否则将不起作用。一位谷歌工程师之前说过。从这里检查

于 2013-11-06T07:12:51.497 回答
0
Display screenDisplay = getActivity().getWindowManager().getDefaultDisplay();
LayoutHeight = screenDisplay.getHeight();
LinearLayout.LayoutParams listLayoutParams = new LinearLayout.LayoutParams(
                    LayoutHeight, LinearLayout.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(listLayoutParams);
于 2013-11-06T07:07:29.837 回答