2013-08-06 40 views
34

Tôi cố gắng để thiết lập màu nền của một nút trong ứng dụng của tôi và tôi không thể đạt được kết quả mà tôi muốn ...nút Android màu nền

Màu mà tôi đang cố gắng thiết lập là holo_green_light(#ff99cc00). Để thực hiện điều đó, tôi đang sử dụng setColorFilter(0xff99cc00, PorterDuff.Mode.MULTIPLY);

Màu tôi nhận được không phải là holo_green_light mà là kết hợp của lightgrey và holo_green_light.

Tôi đã thử sử dụng LightingColorFilter mà không thành công nhiều.

Có cách nào để làm điều đó theo chương trình, để nút xuất hiện như một nút chứ không phải hình chữ nhật phẳng với màu mà tôi cần.

+0

hãy thử sử dụng android: background = "@ drawable/button" – Giant

Trả lời

18

Buttons là phức tạp hơn chỉ cần thay đổi một màu ...

Android các nút được tạo bằng cách sử dụng khá nhiều bản vá và bản vẽ trạng thái. Bạn nên xem Android Holo Colors để tạo ra chúng, bạn sẽ muốn chọn "Nút màu" và nó sẽ tạo ra những hình ảnh cần thiết & xml cho bạn ...

+1

Liên kết không còn khả dụng nữa – hiddeneyes02

+0

@ hiddeneyes02 bị mất theo thời gian. Tìm kiếm cursory cho thấy một plugin IntelliJ để làm điều này. https://github.com/jeromevdl/android-holo-colors-idea-plugin – Tonithy

2

Tại sao không chỉ sử dụng setBackgroundColor(getResources().getColor(R.color.holo_light_green))?

Chỉnh sửa: Nếu bạn muốn có thứ gì đó trông giống nút Android hơn, bạn sẽ muốn tạo một đường viền và đặt làm nền. Ví dụ về điều này, bạn có thể xem this question.

+1

Điều đó có làm cho nút trông giống như hình chữ nhật phẳng không? – user2260040

+0

Có vẻ như các nút Android mặc định có độ dốc làm nền của chúng, vì vậy nếu bạn muốn bắt chước hiệu ứng đó, bạn có thể sẽ cần tự tạo gradient và đặt làm nền. Tôi đã thêm bản chỉnh sửa vào hiệu ứng đó. – Jonathan

8

Tạo /res/drawable/button.xml với nội dung sau:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" android:padding="10dp"> 
<!-- you can use any color you want I used here gray color--> 
<solid android:color="#90EE90"/> 
    <corners 
    android:bottomRightRadius="3dp" 
    android:bottomLeftRadius="3dp" 
    android:topLeftRadius="3dp" 
    android:topRightRadius="3dp"/> 
</shape> 

Và sau đó bạn có thể sử dụng như sau:

<Button 
    android:id="@+id/button_save_prefs" 
    android:text="@string/save" 
    android:background="@drawable/button"/> 
32

Đây là cách của tôi để làm nút tùy chỉnh với màu sắc khác nhau. `

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
<stroke android:width="3dp" 
     android:color="#80FFFFFF" /> 

    <corners android:radius="25dp" /> 

    <gradient android:angle="270" 
      android:centerColor="#90150517" 
      android:endColor="#90150517" 
      android:startColor="#90150517" /> 
</shape> 

Bằng cách này bạn đặt làm nền.

<Button android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" 
     android:layout_marginBottom="25dp" 
     android:layout_centerInParent="true" 
     android:background="@drawable/button"/> 
+7

Đối với noob giống như tôi, sẽ hữu ích nếu bạn hiểu rõ hơn về nơi mẫu mã đầu tiên nên đi. Có phải tệp có tên là Button.xml trong thư mục drawables không? – Geoff

+0

hai Geoff. hãy tạo một thư mục drawable trong thư mục res và tạo một button.xml. xin vui lòng sao chép dán mã này. gọi xml này trong nền Nút ur. Nó sẽ hoạt động. –

12

Nếu bạn không ngại mã hóa, bạn có thể làm điều này ~> android: background = "# eeeeee" và thả bất kỳ màu hex nào bạn muốn.

Trông như thế này ....

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/textView1" 
    android:text="@string/ClickMe" 
    android:background="#fff"/> 
+4

Bạn mất các góc tròn và trạng thái lựa chọn mặc định bằng cách thay đổi màu nền mặc dù. – eliasbagley

3

không cần phải rằng Hardcore thử điều này:

YourButtonObject.setBackground(0xff99cc00) ;

+1

Ai là F địa ngục -1 cái này? @Mehdi cảm ơn, đây là những gì tôi đến đây cho. NHƯNG, đây là cách chính xác .setBackgroundColor (0xFF00FF00); ;) – Artyom

3

Nếu bạn muốn giữ lại phong cách chung (góc tròn, vv) Và chỉ cần thay đổi màu nền sau đó tôi sử dụng thuộc tính backgroundTint

android: backgroundTint = "@ android: màu/holo_green_light"

+0

'android: backgroundTint' sẽ chỉ được sử dụng cho api> = 21. sử dụng' app: backgroundTint' để thay thế – repitch

0

Để giữ phong cách, sử dụng:

int color = Color.parseColor("#99cc00"); 
button.getBackground().mutate().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC)); 
Các vấn đề liên quan