Đệm không mong muốn xung quanh một ImageView


142

Tôi cần bao gồm một hình ảnh tiêu đề trong tất cả các hoạt động / quan điểm của tôi. Tệp có tiêu đề được gọi là tiêu đề:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"
  android:background="#0000FF" 
  android:padding="0dip">

  <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/header"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="0dip"
    android:layout_marginTop="0dip"
    android:layout_marginBottom="0dip"
    android:padding="0dip"
    android:paddingTop="0dip"
    android:paddingBottom="0dip"
    android:layout_gravity="fill"
    android:background="#00FF00"
    />
</FrameLayout>

Lưu ý android:background="#00FF00"(màu xanh lá cây), đó chỉ là mục đích trực quan.

Tôi đưa chúng vào quan điểm của tôi như thế này:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  style="@style/white_background">

  <include layout="@layout/header" />
  (...)

Vì vậy, khi tôi thực sự dùng thử, kết quả trông giống như hình ảnh bên trái, thay vì trông giống như (bên phải):

lưu ý đường viền màu xanh lá cây

(1) Phần này - phần màu cam là hình ảnh / ImageView trong câu hỏi
(2) Đường viền màu xanh lá cây không được yêu thích. lưu ý: thông thường, vùng màu xanh lá cây sẽ trong suốt - Nó chỉ màu xanh do tôi đặt background.

Lưu ý đường viền màu xanh lá cây xung quanh hình ảnh ở trên cùng; Đó là một phần của ImageView và tôi không thể hiểu tại sao nó ở đó hoặc làm thế nào tôi có thể thoát khỏi nó. Nó đặt tất cả các phần đệm và lề là 0 (nhưng kết quả là như nhau khi tôi bỏ qua chúng). Hình ảnh là một jpeg 480x64px * và tôi đặt nó trong res / drawable (không phải ở một trong cácdrawable-Xdpi mặc dù).

.

Tôi đã thử nó trên mong muốn htc của tôi / 2.2 / Build 2.33.163.1 và trên trình giả lập. Ngoài ra tôi đã mô tả vấn đề cho ai đó trong # android-dev; Cô có thể tái tạo vấn đề nhưng cũng không có lời giải thích. mục tiêu xây dựng là 1.6.

update @tehgoose: mã này mang lại kết quả chính xác trên cùng + dưới cùng.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  style="@style/white_background">

  <!-- <include layout="@layout/header" />  -->

  <ImageView
    android:src="@drawable/header"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#00FF00"
    android:layout_weight="0"
    />

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dip"
    android:layout_weight="1">

    (... rest of the elements)

  </LinearLayout>
</LinearLayout>

Các giá trị lề và / hoặc phần đệm âm cũng có thể hoạt động - android:layout_margin="-10dp",android:padding="-10dp"
samis 16/11/18

Câu trả lời:


442

cuối cùng

<ImageView
  (...)
  android:adjustViewBounds="true" />

các adjustViewbounds thuộc tính đã làm các trick:

Đặt điều này thành đúng nếu bạn muốn ImageView điều chỉnh giới hạn của nó để duy trì tỷ lệ khung hình có thể vẽ được.

tôi stumbled khi nó ở đây . Cảm ơn bạn đã giúp đỡ!


7
Tôi có cùng một vấn đề, nhưng giải pháp này không có hiệu quả.
Marty Miller

4
Wow ... không có thuộc tính đó, có phần đệm không mong muốn được thêm vào tùy thuộc vào mật độ màn hình, vì vậy nó chỉ xảy ra trên một số thiết bị. Nó khiến tôi phát điên vì hình ảnh trông đẹp trên tất cả các thiết bị tôi sở hữu, sau đó khi tôi thử nó trên thiết bị của một người bạn, nó trông giống như tào lao. CẢM ƠN BẠN.
DiscDev

Cảm ơn các vị thần, tôi chuyển sự khinh miệt đầu tiên của mình từ việc cố gắng giải quyết lỗi để tìm thứ gì đó hao mòn của Android. Tôi tin rằng vấn đề này bắt đầu ở một số nhà sản xuất thay đổi công cụ từ Android và sau đó họ phải đặt một tài sản để giải quyết nó trong các phiên bản tiếp theo.
Ratata Tata

Đáng buồn thay, điều này không làm việc cho apis thấp hơn, api 16 & 17 ít nhất.
kẻ lừa đảo

1
Ồ, đây chính xác là những gì tôi đang tìm kiếm, tôi đã gãi đầu trong vài giờ, thậm chí đã cố gắng vô hiệu hóa bố cục của mình và đặt chiều cao / chiều rộng của nó thành hình ảnh. Một giải pháp đơn giản như vậy hoạt động hoàn hảo mà không cần scaleType.
CodyEngel

39
android:scaleType="fitXY"

Nó làm việc cho tôi.


3
scaleType="fitXY"làm một cái gì đó khác nhau mặc dù: nó thay đổi tỷ lệ khung hình của hình ảnh, dẫn đến biến dạng. điều này đôi khi có thể được chấp nhận, ví dụ cho một hình ảnh nền trừu tượng.
stefs

1
Tôi đã kiểm soát tỷ lệ khung hình bằng cách sử dụng android: width và android: height và scaleType = "fitXY" đã lấp đầy imageView cho tôi với tỷ lệ khung hình mong muốn, đó ít nhất là kinh nghiệm của tôi. Cảm ơn vì đầu vào của bạn.
Badr

Nó hoạt động nhưng hình ảnh là unpretty, mất cân bằng, cắt
최봉재

1
Không chính xác nhưng android: scaleType = "fitEnd" hoạt động như ma thuật.
Thủ thư

Tôi đã tìm thấy một sự kết hợp android:adjustViewBounds="true"android:scaleType="fitXY"là những gì tôi cần để sắp xếp ImageViews trong bố cục của mình. Các hình ảnh bị tắt bởi một hoặc hai pixel (rất nhỏ trên màn hình độ phân giải cao) chỉ với adjustViewBounds. Việc thêm scaleTypedường như để buộc tỷ lệ cuối cùng của hình ảnh sau khi giới hạn chế độ xem được điều chỉnh, điều đó buộc hình ảnh phải chia tỷ lệ thành kích thước đầy đủ của giới hạn mới.
Jeff Lockhart

3

Nó phải làm với tỷ lệ hình ảnh. Theo mặc định, hệ thống giữ tỷ lệ khung hình gốc của nguồn hình ảnh. Mà trong hầu hết các trường hợp không khớp chính xác với bố cục hoặc kích thước được chỉ định trong bố cục. Vì thế,

  1. Thay đổi kích thước của hình ảnh để phù hợp với bố cục đã chỉ định hoặc
  2. Sử dụng android:scaleTypeđể phù hợp với hình ảnh. Ví dụ: bạn có thể chỉ địnhandroid:scaleType="fitXY"

3

những phần đệm thêm đó được tự động tạo vì Android sẽ cố lấy tỷ lệ khung hình gốc. vui lòng thử bên dưới

scaletype = "fitCenter"
android:adjustViewBounds="true"
android:layout_height="wrap_content"

0

Có thể là bạn có thể cho specific height to imageView say 50dp or 40dpvà biến adjust image to make green bordermất.

Ví dụ: android:layout_height="40dp"


thiết lập layout_creen = "480px" và layout_height = "64px" mang lại kết quả tôi muốn, nhưng pixel không thực tế lắm. Tôi thực sự không hiểu làm thế nào mà dịch sang dp.
stefs

Bạn nên sử dụng dp giống như pixel của bạn. Đó là tất cả những gì họ đang có; hiển thị pixel độc lập. nhưng nó đã có tác dụng.
Udaykiran

dp / dip có nghĩa là Mật độ pixel độc lập; theo như tôi hiểu, nó bao gồm các mật độ khác nhau, nhưng (tất nhiên) không phải là kích cỡ màn hình khác nhau. tất cả những gì tôi muốn là hình ảnh được chia tỷ lệ thành 100% chiều rộng màn hình và để lại chiều cao để tỷ lệ được giữ.
stefs

0
android:layout_height="wrap_content"

Bạn cần thay đổi nó thành "fill_parent"

Bạn cũng có thể cần phải chia tỷ lệ hình ảnh của mình để nó sẽ là tỷ lệ phù hợp để lấp đầy phần viền của nó.

Tôi không hiểu tại sao bạn cần bố trí khung ở đó. Không có nó, hình ảnh của bạn sẽ chỉ lấp đầy màn hình.

EDIT: có, xin lỗi, xml là chiều cao cho số lần xem hình ảnh.


1
Điều duy nhất cần thêm là anh ta cần đặt chiều cao bố cục ImageView, điều đó không quá rõ ràng trong câu trả lời của bạn :)
ernazm

tôi cũng đã thử nó mà không có bố cục xung quanh, không thay đổi gì cả. Ngoài ra, hình ảnh hiện tại chỉ là một trình giữ chỗ - sẽ sớm có các yếu tố bổ sung (biện minh cho bố cục xung quanh). Tôi không muốn hình ảnh khớp với màn hình, tôi muốn nó ở đó, ở trên cùng.
stefs

Kiểm tra kỹ để xem hình ảnh của bạn có khoảng trống ở trên và dưới không. Nếu không, hãy thử mở rộng đối tượng hình ảnh bằng cách sử dụng android: scaleType = "". Nên có một cái cho phù hợp với những gì bạn đang tìm kiếm.
NotACleverMan


-1

Bạn cần cung cấp hình dạng xung quanh hình ảnh để nhìn rõ hơn.

Đây là những gì tôi đã sử dụng:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--<gradient android:startColor="#FFFFFF" android:endColor="#969696"

    android:angle="270">
-->
<gradient android:startColor="#FFFFFF" android:endColor="#FFFFFF"

    android:angle="270">
</gradient>
    <stroke android:width="2dp" android:color="@color/graycolor" />
<corners android:radius="2dp" />
<padding android:left="5dp" android:top="5dp" android:right="5dp"
    android:bottom="5dp" />


2
Ái chà! tôi đã làm việc với các hình dạng (cho nền tab), nhưng thành thật mà nói, tôi không hiểu làm thế nào tôi nên áp dụng điều đó ở đây.
stefs

@Schnalle: tạo hai tệp hình dạng tệp và một tệp selector.xml. áp dụng nền hình ảnh dưới dạng tệp selector.xml. Trong tệp chọn cung cấp hai trạng thái cho trạng thái tập trung / được chọn và trạng thái bình thường.
Zoombie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.