2011-08-01 290 views
14

有没有办法做到这一点?我试图填充图像和设置视图的宽度/高度,但似乎都不起作用。这里是一个例子:在Android中调整ImageButton的大小

<ImageButton 
    android:id="@+id/search" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/search_small" 
    android:paddingTop="4sp" 
    android:paddingBottom="4sp" 
    android:paddingLeft="6sp" 
    android:paddingRight="6sp" 
    android:layout_marginRight="10sp" 
    android:layout_marginTop="6sp" 
    android:layout_marginBottom="6sp" 
    android:layout_alignParentRight="true" 
/> 

我想要按钮比它高,但它是出现相反的方向。

+0

我们能否看到XML或东西?你很难相信你尝试过但不工作 –

+0

你能发布你的示例代码吗?这将使得回答这个问题变得更容易。您应该能够在imageButton上设置minHeight和minWidth以使其更大。 – kcunning

+0

minWidth是一个好主意,但这也行不通。 –

回答

25

只是有一场戏来尝试和理解你的问题。

似乎ImageButton是一个复合视图,它有一些预设值。如某些您无法用XML覆盖的保证金。如果你不能改变你的形象来匹配你想要发生的事情,那么你最好创建自己的复合视图。

这里是我的一个复合视图的例子,你可以让自己:

<FrameLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content">   
    <Button android:id="@+id/saveSearchButton" 
      android:layout_width="50dp"   
      android:layout_height="50dp" /> 
    <ImageView android:layout_width="45dp" 
       android:layout_height="45dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/ic_menu_save" 
       android:layout_gravity="center"/> 
</FrameLayout> 

<FrameLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content">   
    <Button android:id="@+id/clearSearchButton" 
      android:layout_width="50dp" 
      android:layout_height="50dp" /> 
    <ImageView android:layout_width="45dp" 
       android:layout_height="45dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/ic_menu_close_clear_cancel" 
       android:layout_gravity="center"/> 
</FrameLayout>  

和原来的按钮:

<ImageButton android:id="@+id/imageButton1" 
      android:src="@drawable/ic_menu_save"    
      android:layout_height="45dp" android:layout_width="45dp"/> 

<ImageButton android:id="@+id/imageButton2" 
      android:src="@drawable/ic_menu_close_clear_cancel" 
      android:layout_height="45dp" 
      android:layout_width="45dp"/> 

在这里我们可以看到,然后构建自定义图像/按钮复合ImageButton作为SDK的一部分:

Example

+0

这很聪明Answer(y) –

7

您不应该使用sp作为尺寸尺寸 - 应该使用dp,因为它可以帮助您的视图以不同的屏幕密度和分辨率直接缩放。尺寸为See Here

padding会将其他元素从视图边界推开。 margin将从你的边界向内推动你的视图的内容(即将压缩你的图片的可用空间)。边界由高度和宽度指定。没有更多的信息,我想你会被你的利润困惑 - 删除它们并进行实验。

对您也有用:android:scaleType="fitXY"使图像拉伸以匹配可用的X和Y尺寸。它可以帮助您查看图像可用的画布。一旦您感觉该区域足够大,以便正确缩放的图像将比例类型更改为centerInside。所有比例类型均为See Here

+0

此外,“按钮比宽高”。这由您的layout_width和layout_height属性控制。他们控制组件的宽度和高度。 “match_parent”表示该按钮将尝试尽可能多地填充页面上其他视图的空间。阅读[本节](http://developer.android.com/guide/topics/ui/index.html)了解UI设计。 – Graeme

+0

谢谢,但我已经知道边距和填充以及sp和dp之间的区别。这不是我的问题的根源。 –

+0

哦,我也知道layout_width和layout_height是如何工作的。 –

0

你可以更广泛地解释你的问题,以便我们能够更好地理解。

根据我的理解你想设置你的ImageButton的高度/宽度。但它不起作用吗?我想问你,如果你写出任何特定的高度/宽度,那么它也不起作用?

我将您的代码复制到我的文件中,然后手动更改了高度/宽度,然后就可以工作。

请解释你的问题。

谢谢。

+0

什么都行不通,那就是问题所在。我无法以任何方式控制ImageButton的大小。 –

+0

而不是使用ImageButton只使用button和setBackgroung来设置图像。然后尝试。 – anddev

0

我完成了Graeme的回答后的布局。四个“imageButton”固定底部,相同宽度,可变图像大小。谢谢!

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:background="@color/#000" 
     android:weightSum="100" > 

     <FrameLayout 
      android:id="@+id/flBottom1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom1" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_home_48_48" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="5dp" 
       /> 
      <TextView 
       android:id="@+id/tvBottom1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_home" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom2" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom2" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_compose_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_comment" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom3" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_search_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_search" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom4" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom4" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_barcode_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_scan_again" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 
    </LinearLayout> 
10

android:background代替android:src设置按钮上的图像。这会将图像调整为按钮的大小。然后调整填充。

2

我使用minWidthminHeight属性,并结合fitXY比例类型,并将其内容封装以调整我的按钮的形状。

你想使你的按钮,“宽”,所以例如,打印出黑白200x100按钮出一个方形图标,你会生出来像:

<ImageButton 
     android:id="@+id/fooButton" 
     android:src="@drawable/play_button" 
     android:backgroundTint="#00000000" 
     android:minWidth="200" 
     android:minHeight="100" 
     android:scaleType="fitXY" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="playStuff" 
     /> 

enter image description here