2011-05-23 41 views
0

因此,我正在为图像处理编写此应用程序,并且在用户从图库中选择图像后,我有一个选项页面,顶部有几个控件,中间是所选图像的预览。底部还有一个“开始”按钮,但如果图像足够高,按钮会被遮盖。如何制作ImageView缩放图以在其下留下控制空间?

我认为将图像大小调整为可以工作的特定高度,但该高度会在不同的设备上发生变化。理想情况下,我希望图像占用控件和按钮之间的空间,但我无法弄清楚如何做到这一点。我尝试使用垂直tablelayout,但没有什么区别。

在此图像中,模拟器窗口位于右侧。 The emulator is on the right.

这是我的XML。有点混乱,但这里有:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linearLayout" android:orientation="vertical" 
android:layout_height="wrap_content" android:padding="10px" 
android:layout_width="fill_parent"> 
<TextView android:textSize="18px" android:text="GIF Options" 
    android:id="@+id/textView3" android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</TextView> 

<TableLayout android:id="@+id/tableLayout" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:stretchColumns="1"> 

    <TableRow> 
     <TextView android:layout_height="wrap_content" android:text="FPS:" 
      android:id="@+id/TextView1"  android:layout_width="wrap_content" 
      android:enabled="false" android:textSize="17px"></TextView> 
     <EditText android:text="20" android:inputType="numberDecimal" 
      android:id="@+id/EditTextFPS" android:numeric="decimal" 
      android:singleLine="true" android:layout_height="wrap_content" 
      android:layout_width="wrap_content" android:digits="2" 
      android:width="50px"></EditText> 
    </TableRow> 
    <TableRow> 
     <TextView android:layout_height="wrap_content" android:text="Frames:" 
      android:id="@+id/TextView2" android:layout_width="wrap_content" 
      android:enabled="false" android:textSize="17px"></TextView> 

     <EditText android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="70" 
      android:inputType="numberDecimal" android:id="@+id/EditTextFrames" 
      android:numeric="decimal" android:singleLine="true" android:digits="2"></EditText> 
    </TableRow> 
    <TableRow> 
     <TextView android:layout_height="wrap_content" android:text="Saturation Boost: " 
      android:id="@+id/TextView2" android:layout_width="wrap_content" 
      android:enabled="false" android:textSize="17px"></TextView> 

     <SeekBar android:layout_height="wrap_content" 
      android:layout_width="fill_parent" android:id="@+id/seekBar1" 
      android:layout_alignParentLeft="true" android:max="10"></SeekBar> 

    </TableRow> 
</TableLayout> 

<TextView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/textView4" 
    android:layout_gravity="center" android:text="Chosen Image" 
    android:textSize="16px"></TextView> 
<ImageView android:layout_width="wrap_content" android:src="@drawable/icon" 
    android:layout_gravity="center" android:id="@+id/optionspreview" 
    android:isScrollContainer="true" android:layout_height="fill_parent"></ImageView> 

<Button android:layout_height="wrap_content" 
    android:layout_width="wrap_content" android:textSize="22px" 
    android:id="@+id/startbutton" android:text="Start!" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" android:layout_gravity="center"></Button> 

</LinearLayout> 

回答

2

您可以通过使用RelativeLayout来做到这一点。

一个过于简单的答案(因为我不知道你的布局)将是所有的顶部控件在一个布局(比如说layoutTop)中,布局中的所有按钮控件(layoutBottom)以及你的ImageView在中间:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layoutWrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

    <LinearLayout 
     android:id="@+id/layoutTop" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
    > 
     <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sparta!!!" 
     /> 
    </LinearLayout> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/layoutTop" 
     android:layout_above="@+id/layoutBottom" 
     android:src="@drawable/empty_star" 
    /> 

    <LinearLayout 
     android:id="@id/layoutBottom" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
    > 
     <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sparta!!!" 
     /> 
    </LinearLayout> 

</RelativeLayout> 

这里的技巧是注意我是如何为layoutBottom创建id的。当我声明实际布局时,而不是第一次使用“+”时,即在ImageView中。

+0

谢谢!我会做到这一点。 +号是什么意思? – 2011-05-23 22:23:51

+0

+符号表示您正在声明一个新的ID。在这种情况下,在声明控件之前,实际上是使用了id,因此它在第一次出现在XML文件中时被声明。 (注意,这是我在这个网站上的第一个回答帖子,它被接受为答案!耶!:)) 祝你好运! – MikeWallaceDev 2011-05-23 22:30:00

1

发布您的(XML)布局。你最有可能使用LinearLayout。 A RelativeLayout会简化这一点。如果你发布你的XML,我会给你一个转换它的手。

编辑:我会大大简化您的布局。这种布局非常复杂,需要大量的内存和处理才能充气。您可以使用相对布局的一位父母轻松创建此布局。正确放置的关键是android:layout_alignParentBottom

相关问题