Android Layout - 扩展ImageView以填充宽度,但不是更大?

时间:2011-02-21 21:21:10

标签: android android-layout

Hello有用的stackoverflow成员,

我正在尝试在Android活动中完成看似简单的布局,但我似乎无法使用wrap_content和fill_parent / match_parent进行工作。

图片给出了问题的基本概念: http://i89.photobucket.com/albums/k207/cephron/Layout_quandary.png

在垂直的LinearLayout中,我有一个包含按钮和东西的子布局顶部的ImageView。 我想要扩展ImageView以使图像尽可能大(即填充屏幕宽度),而不需要占用更多的垂直空间来实现这一点(即我希望ImageView触及顶部)屏幕,按钮和东西触摸图像的底部)。 我无法使用wrap_content和fill_parent来实现这一点,而且我所有与引力的混乱似乎都没有改变任何东西。我必须包括权重,以确保图像不会完全脱离屏幕上的所有其他内容。

我很想发布正确的代码,但是 - 我是noob - 我浪费了大约20分钟试图让它与Stackoverflow的代码格式化程序一起使用,并且部分代码格式化程序不会显示。

所以,这是我的代码,它被充分破坏,以至于无法通过选择性删除部分内容来识别它:

[LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"]

    [ImageView android:id="@+id/door_detail_video_frame"
    android:src="@drawable/door_closed_256"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"/]

    [LinearLayout android:id="@+id/door_detail_control_area"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0"]

        [ImageView android:id="@+id/door_detail_status_frame"
        android:src="@drawable/door_closed_locked_67"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"/]

        [LinearLayout android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_width="fill_parent"]

            [Button android:id="@+id/door_detail_override_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/door_detail_override_button_text"/]

            [Button android:id="@+id/door_detail_camera_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/door_detail_camera_button_text"/]

        [/LinearLayout]

    [/LinearLayout]

[/LinearLayout]

相信唯一相关的部分是第一个LinearLayout和ImageView,但是嵌套布局中的东西(对应于“按钮和东西”)是为了完整性而包含的。

有没有办法实现所需的布局格式?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

未经测试,这可能会有所帮助。我之前尝试过这种事情,似乎比应该更难:

ImageView iv = (ImageView)findViewById(R.id.door_detail_video_frame);
ViewTreeObserver vto = iv.getViewTreeObserver();

//gets screen dimensions
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

//this happens before the layout is visible
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int newWidth, newHeight, oldHeight, oldWidth;

        //the new width will fit the screen
        newWidth = metrics.widthPixels;

        //so we can scale proportionally
        oldHeight = iv.getDrawable().getIntrinsicHeight();
        oldWidth = iv.getDrawable().getIntrinsicWidth();
        newHeight = Math.floor((oldHeight * newWidth) / oldWidth);
        iv.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
        iv.setScaleType(ImageView.ScaleType.CENTER_CROP);

        //so this only happens once
        iv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    }
});

提示SO的代码格式化程序:只需将代码复制并粘贴到窗口中,选择全部,然后按Ctrl + K.