2011-08-01 291 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