2009-10-26 33 views
8

Tôi có một vấn đề với EditText nền như thế nàyVấn đề với EditText nền (android)

<EditText 
    android:id="@+id/edit" 
    android:layout_width="fill_parent" 
    android:layout_height="35sp"                  
    android:singleLine="true" 

    android:layout_marginLeft="5px" 
    android:layout_marginRight="5px" 
    android:layout_marginTop="5px" 
    android:textAppearance="?android:attr/textAppearanceSmall"  
     /> 

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext.jpg

Sau khi cố gắng để thiết lập nền, Nó trông tồi tệ hơn

<EditText 
    android:id="@+id/edit" 
    android:layout_width="fill_parent" 
    android:layout_height="35sp"                  
    android:singleLine="true" 

    android:layout_marginLeft="5px" 
    android:layout_marginRight="5px" 
    android:layout_marginTop="5px" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:background="#ffffff"  
     /> 

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext2.jpg

Điều gì xảy ra với nền EditText? Làm thế nào để làm cho EditText giữ kiểu mặc định?

+0

không phải là nó android: textAppearance = "@ android: attr/textAppearanceSmall" – Bostone

+0

Trên thực tế - cú pháp cho văn bản là chính xác, xem câu trả lời của tôi dưới đây – Bostone

Trả lời

4

Nếu bạn đặt nền EditText của bạn đến một màu sắc bạn có hiệu quả sẽ ngăn chặn nền mặc định Android đó là probably a Nine Patch nhưng definetely không chỉ là một màu đơn giản. Kết quả là - bạn sẽ nhận được một dạng EditText đơn giản nhất - một ô vuông. Dưới đây là hơi lỗi thời list of built-in drawables để cung cấp cho bạn một số ý tưởng

2

Vì tôi nghĩ bạn nên thay đổi màu nền chứ không phải nền. Bởi vì nó sử dụng hình dạng tùy chỉnh xml.

  • Có thể sử dụng làm nền. Đây có thể là tham chiếu đến một tài nguyên có thể kéo đầy đủ (chẳng hạn như hình ảnh PNG, mô tả danh sách trạng thái XML, bản vá 9, v.v.) hoặc màu đồng nhất như #ff000000 (màu đen).

  • Có thể là tham chiếu đến tài nguyên khác, ở dạng @[+][package:]type:name hoặc thuộc tính chủ đề theo mẫu ?[package:][type:]nam e.

  • Có thể là một giá trị màu, theo hình thức #rgb, #argb, #rrggbb, hoặc #aarrggbb.

+0

cú pháp ông sử dụng cho màu nền là hợp lệ – Bostone

+0

ổn abou t cú pháp, tôi nghĩ rằng ông ghi đè hình nền xml mặc định với bóng vv và đặt nó thành màu đồng nhất. – Shtirlic

16

Đây là 2 giải pháp để thay đổi nền của EditText tôi có điều tra trước đây, hy vọng nó có thể giúp bạn:

Issue: Khi thiết lập nền để EditText nó trông rất khủng khiếp

Analysys: EditText đã sử dụng hình ảnh chín đường cho nền. Họ sử dụng một chọn để thay đổi cơ sở hình nền về tình trạng hiện tại của EditText (Enable/Focus/Press, Default)

Có hai giải pháp cho người giải quyết vấn đề này, mỗi giải pháp có cả lợi thế và bất lợi:

Solution1: Tạo tùy chỉnh bản thân EditText (theo giải pháp này, chúng tôi đã tự do thay đổi quan điểm của EditText

Advantage:. bạn tự do làm cho EditText xem theo pu của bạn rpose, Không cần phải tạo ra hình ảnh Ninepath như hiện tại thực hiện của Android EditText. (Nhà cung cấp phải của bạn IF trong EditText của bạn để thay đổi nền trơn tru dựa trên trạng thái EditText (Enable/Focus ....) tái sử dụng có thể tùy chỉnh và nhiều hơn nữa trong trường hợp bạn muốn thay đổi màu sắc của nền hoặc thêm màu sắc hơn

Nhược điểm: Đi nhiều nỗ lực để tạo ra và kiểm tra tùy chỉnh của bạn EditText. (tôi chọn giải pháp 2 để không có bản demo thực hiện các giải pháp 1, nếu có một làm theo giải pháp này cảm thấy tự do để chia sẻ với chúng tôi code demo của bạn)

Solution2: sử dụng selector như Android thực hiện

xml ❶Create tập tin gọi edittext_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/edittext_selector"> 
    <!-- Image display in background in select state -->  
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 

     <!-- Image display in background in select state -->  
    <item 
     android:state_enabled="true" 
     android:state_focused="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 

    <!-- Default state --> 
    <item android:state_enabled="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 
</selector> 

❷On EditText xml bộ selector:

<EditText 
    ... 
    android:background="@layout/**edittext_selector**" 
    ... 
</EditText> 

Note:

● Trong mã demo này tôi đã loại bỏ một số hành vi của view state, tham khảo android thực hiện hành vi chi tiết (trọng tâm/Không tập trung, cho phép/vô hiệu hóa, báo chí, lựa chọn ...)

● Đặt hàng cẩn thận trong bộ chọn của bạn. Thứ tự khác nhau của mục trong tệp xml chọn sẽ có nền khác biệt.

Advantage: Đơn giản, chỉ cần tạo bộ chọn và đặt bộ chọn thành nền, trong trường hợp bạn muốn thêm màu, chỉ cần đặt bộ chọn khác rồi đặt theo mã.

Nhược điểm: Hãy cố gắng tạo hình ảnh đường đi cho bộ chọn, trong trường hợp bạn muốn thay đổi màu hoặc thêm nhiều màu, bạn phải tạo thêm hình ảnh và bộ chọn. Vì vậy, nó ít mạnh mẽ hơn Solution1

Đây là điều tra của tôi để xử lý nền của hình ảnh, do đó, nó có thể đúng hay sai, nếu bạn có giải pháp tốt hơn hoặc giải thích, cảm thấy tự do để chia sẻ với chúng tôi.

Tôi đã thực hiện theo giải pháp 2 và hoạt động.

4

Nếu bạn muốn chỉnh sửa màu sắc của nền Android một cách nhanh chóng mà không thay đổi hình nền hoàn toàn, hãy thử như sau: (nó có lẽ không phải là giải pháp tốt nhất nhưng nó hoạt động):

YourEditText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.MULTIPLY); 
11

My giải pháp là một dòng mã:

<your-widget-component-that-has-a-background-color>.getBackground().setColorFilter(Color.<your-desired-color>, PorterDuff.Mode.MULTIPLY);). 

Nó phá vỡ như thế này:

  • "getBackgrou nd() "tìm nạp nền từ thành phần
  • " setColorFilter "sẽ gọi bộ lọc trên chính hình nền
  • " Màu. < your-color-here> "xác định màu nào bạn muốn chuyển vào bộ lọc
  • " PorterDuff.Mode. < your-desire-filter-mode> "đặt loại thao tác bạn muốn thực hiện với màu đã cho và hình nền được tìm nạp.

Những người có kiến ​​thức về phần mềm chỉnh sửa hình ảnh có thể nhận ra chế độ. Mỗi chế độ có một hiệu ứng nhất định về cách màu được áp dụng cho hình nền. Để chỉ đơn giản là "ghi đè lên" màu của hình ảnh, trong khi vẫn giữ được độ dốc, đường viền của nó và như vậy, hãy sử dụng MULTIPLY.

+0

chính xác những gì tôi đang tìm kiếm. Cảm ơn! – Max

+0

Tốt nhất ở đây. –

3

Bạn không cần phải tạo hình ảnh. Có một xây dựng trong hình ảnh trong hệ thống android mà bạn có thể chỉnh sửa use.So EditText của bạn trong xml như sau; -

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="30dp" 
    android:layout_marginRight="30dp" 
    android:layout_marginTop="10dp" 
    android:hint="@string/campaign_message" 
    android:inputType="textMultiLine" 
    android:background="@android:drawable/editbox_background_normal" 
    android:minHeight="80dp" > 
</EditText> 

Lưu ý dòng này: android:background="@android:drawable/editbox_background_normal"

+0

Bạn đã bỏ lỡ vấn đề? Khi bạn đặt màu nền của văn bản chỉnh sửa, ký tự có thể vẽ được ghi đè sẽ bị ghi đè. Trừ khi bạn đã đặt chủ đề cho EditText của mình cách xa đối tượng vẽ mặc định, không có lý do gì để thậm chí sử dụng "android: backgroun =" @ android: drawable/editbox_background_normal " –

0

tôi đã phải sử dụng SRC_ATOP cho nó hoạt động đối với tôi

mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);