2013-02-27 40 views
91

Tôi có 6 ImageButton trong hoạt động của mình, tôi đặt hình ảnh qua mã của tôi trong đó (không sử dụng xml).Hình ảnh phù hợp trong ImageButton trong Android

Tôi muốn chúng chiếm 75% diện tích nút. Nhưng khi một số hình ảnh bao gồm ít diện tích hơn, một số hình ảnh quá lớn để vừa với imageButton. Làm thế nào để thay đổi kích thước và hiển thị chúng? Dưới đây là màn hình bắn

enter image description here dưới đây là xml-file

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp"  > 
    <LinearLayout 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1" 
     android:orientation="horizontal"> 
     <ImageButton   

      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_topleft" 
     android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp" 
      /> 
     <ImageButton 
      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_topright" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp" 
      /> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1" 
     android:orientation="horizontal"> 

     <ImageButton 
      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_repeat" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp"  
      /> 

       <ImageButton 
      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_next" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp"  
      /> 

    </LinearLayout>  
    <LinearLayout 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1" 
     android:orientation="horizontal"> 

     <ImageButton 
      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_bottomleft" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp"         
      /> 
     <ImageButton 
      android:layout_height="match_parent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:id="@+id/button_bottomright" 
    android:layout_marginBottom="5sp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="5sp" 
     android:layout_marginTop="0sp"     
      />   
    </LinearLayout>   

</LinearLayout> 

và một đoạn myClass.java:

public void addImageButtons() 
    { 
     iB_topleft = (ImageButton) findViewById(R.id.button_topleft); 
     iB_topright = (ImageButton) findViewById(R.id.button_topright); 
     iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft); 
     iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright); 
     iB_next = (ImageButton) findViewById(R.id.button_next); 
     iB_repeat = (ImageButton) findViewById(R.id.button_repeat); 
    } 

    public void setImageNextAndRepeat() 
    { 

    iB_topleft .setImageResource(R.drawable.aa); 
     iB_topright.setImageResource(R.drawable.bb); 

    iB_bottomleft.setImageResource(R.drawable.cc); 
     iB_bottomright.setImageResource(R.drawable.dd); 

     iB_next.setImageResource(R.drawable.next); 
     iB_repeat.setImageResource(R.drawable.repeat);  
    } 
+1

có bạn kiểm tra rộng-phương pháp android cung cấp? http://developer.android.com/reference/android/widget/ImageView.ScaleType.html – bofredo

Trả lời

268

Tôi muốn họ để trang trải 75% của khu vực nút.

Sử dụng android:padding="20dp" (điều chỉnh phần đệm khi cần) để kiểm soát lượng hình ảnh chụp trên nút.

nhưng khi một số hình ảnh che khu vực ít hơn, một số hình ảnh quá lớn để vừa với nút imageButton. Làm thế nào để thay đổi kích thước và hiển thị chúng?

Sử dụng android:scaleType="fitCenter" để có quy mô Android hình ảnh và android:adjustViewBounds="true" để họ điều chỉnh giới hạn do chia tỷ lệ.

Tất cả các thuộc tính này có thể được đặt trong mã trên mỗi ImageView khi chạy. Tuy nhiên, nó dễ dàng hơn nhiều để thiết lập và xem trước trong xml theo ý kiến ​​của tôi.

Ngoài ra, không sử dụng sp cho bất cứ điều gì khác hơn là kích thước văn bản, nó được thu nhỏ tùy thuộc vào sở thích kích thước văn bản các bộ dùng, vì vậy sp kích thước của bạn sẽ lớn hơn bạn dự định nếu người dùng có một "lớn" cài đặt văn bản. Sử dụng dp thay vào đó, vì nó không được thu nhỏ theo sở thích kích thước văn bản của người dùng.

Dưới đây là một đoạn về những gì mỗi nút sẽ giống như thế:

<ImageButton 
     android:id="@+id/button_topleft" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="5dp" 
     android:layout_marginLeft="2dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="0dp" 
     android:layout_weight="1" 
     android:adjustViewBounds="true" 
     android:padding="20dp" 
     android:scaleType="fitCenter" /> 

Sample Button

+1

Cảm ơn nó đã hoạt động. – RDX

+0

@Steven Byle Xin lỗi vì sự phản ứng trễ, nhưng làm cách nào tôi có thể áp dụng như vậy nhưng đối với bố cục tương đối? –

+1

Đã hoạt động! đã lưu tìm kiếm giờ của tôi! Yêu bạn –

5

Cố gắng sử dụng android:scaleType="fitXY" trong i-ImageButton xml

+0

mặc dù điều này làm việc và thu nhỏ, nhưng tôi muốn rằng nó phải bao gồm 75% diện tích cho khả năng hiển thị tốt hơn. – RDX

+0

@PowerPC cố gắng sử dụng framelayout cho độ cao và chiều rộng đến 75% và vào bố cục khung đó sử dụng nút hình ảnh của bạn và đặt loại tỷ lệ phù hợp với xy –

+0

framelayout cho mỗi nút ảnh bên trong linearlayout? u có thể plz làm rõ – RDX

4

Tôi đang sử dụng android:scaleType="fitCenter" với sự hài lòng.

16

Tôi đang sử dụng đoạn mã sau vào xml

android:adjustViewBounds="true" 
android:scaleType="centerInside" 
+0

Câu trả lời hay. –

+0

Tôi có một hình chữ nhật khá "phẳng" và điều này hoạt động tốt cho tôi ... một bắt mặc dù: chắc chắn rằng bạn sử dụng "android: src" thay vì "android: background". +1. –

0

Gần đây tôi phát hiện ra một cách tình cờ rằng kể từ khi bạn có quyền kiểm soát nhiều hơn về một ImageView rằng bạn có thể đặt một OnClickListener cho một hình ảnh đây là một mẫu của nút hình ảnh được tạo động

private int id; 
private bitmap bmp; 
    LinearLayout.LayoutParams familyimagelayout = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 

    final ImageView familyimage = new ImageView(this); 
      familyimage.setBackground(null); 
      familyimage.setImageBitmap(bmp); 
      familyimage.setScaleType(ImageView.ScaleType.FIT_START); 
      familyimage.setAdjustViewBounds(true); 
      familyimage.setId(id); 
      familyimage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //what you want to do put here 
       } 
      }); 
0

Nó hoạt động tốt trong trường hợp của tôi. Trước tiên, bạn tải xuống một hình ảnh và đổi tên nó thành biểu tượng, định vị nó trong thư mục drawable. Bạn có thể thay đổi kích thước bằng cách đặt android:layout_width hoặc android:layout_height.Cuối cùng, chúng tôi có

<ImageButton 
     android:id="@+id/answercall" 
     android:layout_width="120dp" 
     android:layout_height="80dp" 
     android:src="@drawable/iconimage" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:scaleType="fitCenter" /> 
0

Tham khảo bên dưới liên kết và cố gắng để tìm thấy những gì bạn thực sự muốn:

ImageView.ScaleType Center TRUNG TÂM hình ảnh trong giao diện, nhưng thực hiện không mở rộng quy mô.

ImageView.ScaleType CENTER_CROP Scale hình ảnh thống nhất (duy trì tỉ lệ của hình ảnh) để cả hai kích thước (chiều rộng và chiều cao) của hình ảnh sẽ bằng hoặc lớn hơn chiều tương ứng của view (trừ đệm).

ImageView.ScaleType CENTER_INSIDE Scale hình ảnh thống nhất (duy trì tỉ lệ của hình ảnh) để cả hai kích thước (chiều rộng và chiều cao) của hình ảnh sẽ bằng hoặc nhỏ hơn kích thước tương ứng của view (trừ đệm).

ImageView.ScaleType FIT_CENTER Chia tỷ lệ hình ảnh bằng CENTER.

ImageView.ScaleType FIT_END Chia tỷ lệ hình ảnh bằng END.

ImageView.ScaleType FIT_START Chia tỷ lệ hình ảnh bằng START.

ImageView.ScaleType FIT_XY Chia tỷ lệ hình ảnh bằng FILL.

ImageView.ScaleType MATRIX Scale sử dụng ma trận hình ảnh khi vẽ.

https://developer.android.com/reference/android/widget/ImageView.ScaleType.html

Các vấn đề liên quan