Đặt màu nền của thành phần bố cục Android


198

Tôi đang cố gắng, phần nào sao chép thiết kế của một hoạt động từ một tập hợp các slide trên thiết kế UI Android . Tuy nhiên tôi đang gặp vấn đề với một nhiệm vụ rất đơn giản.

Tôi đã tạo bố cục như trong hình và tiêu đề là TextViewa RelativeLayout. Bây giờ tôi muốn thay đổi màu nền của RelativeLayout, tuy nhiên tôi dường như không thể tìm ra cách.

Tôi biết tôi có thể đặt thuộc android:backgroundtính trong RelativeLayoutthẻ trong tệp XML, nhưng tôi phải đặt thuộc tính nào? Tôi muốn xác định một màu mới mà tôi có thể sử dụng ở nhiều nơi. Nó là một drawablehay một string?

Ngoài ra, tôi hy vọng sẽ có một cách rất đơn giản để thực hiện điều này từ bên trong Trình thiết kế giao diện người dùng Android mà tôi phải thiếu?

Hiện tại tôi hơi thất vọng, vì đây phải là một hoạt động được thực hiện với tối đa một vài lần nhấp. Vì vậy, bất kỳ trợ giúp là rất đánh giá cao. :)

Thiết kế hoạt động Android


28
bạn đã sử dụng phần mềm nào để vẽ biểu đồ bên phải?
lucas

8
@lucas: Tôi không vẽ sơ đồ, như tôi đã lưu ý trong các câu hỏi, đó là từ một bộ slide trên thiết kế giao diện người dùng Android. Xem liên kết trong câu hỏi.
Bjarke Freund-Hansen

Câu trả lời:


280

Bạn có thể sử dụng tài nguyên màu đơn giản , thường được chỉ định bên trong res/values/colors.xml.

<color name="red">#ffff0000</color>

và sử dụng thông qua này android:background="@color/red". Màu này có thể được sử dụng ở bất cứ nơi nào khác, ví dụ như màu văn bản. Tham chiếu nó trong XML theo cùng một cách hoặc lấy mã thông qua getResources().getColor(R.color.red).

Bạn cũng có thể sử dụng bất kỳ tài nguyên có thể vẽ nào làm nền, sử dụng android:background="@drawable/mydrawable"cho điều này (có nghĩa là 9patch drawables, bitmap thông thường, drawable hình dạng, ..).


6
Hoạt động như một lá bùa, cảm ơn. Bạn có thể chỉ cho tôi tham khảo nơi tôi nên đọc này?
Bjarke Freund-Hansen

6
Uhh thực sự: Không. Chỉ cần tìm kiếm các tài liệu, đây là công cụ Android khá chuẩn, nhưng dường như không có tài liệu nào thực sự được ghi lại. Cả các hướng dẫn trên trang dev cũng như các mẫu api đều sử dụng điều này. Tài liệu android hơi thiếu khi nói đến một số tính năng. Tôi nghĩ rằng tôi đã chọn nó một cách tình cờ trong một số hướng dẫn bên ngoài. Thông thường, đó là một ý tưởng tốt để duyệt các mẫu api và các dự án mẫu mặc dù. Bạn có thể tìm thấy mã bên trong ANDROID_SDK\samplesthư mục (đối với các phiên bản Android khác nhau). Toàn bộ ứng dụng mẫu api cũng được cài đặt sẵn trong mọi trường hợp giả lập.

2
Cũng chỉ cần kiểm tra thiết kế UI. Không có gì dễ dàng được tìm thấy. Nhưng tôi khuyên bạn nên viết mọi thứ bằng tay trong xml. Nhà thiết kế đã cải thiện rất nhiều gần đây, nhưng theo tôi thì nó vẫn không thể sử dụng được. Không chỉ bị giới hạn một số tùy chọn, bố cục đôi khi trông hoàn toàn khác nhau trên một thiết bị thực (đặc biệt là khi sử dụng tài nguyên có thể rút được tham chiếu. Chúng không được thu nhỏ chính xác hoặc thậm chí không được hiển thị theo kinh nghiệm của tôi) . Kiểm tra bố cục của bạn trên thiết bị hoặc trên trình giả lập.

1
đối với một số màu "mặc định", bạn có thể sử dụng cú pháp này: android: background = "@ android: color / white"
dalf

1
getResource (). getColor () không dùng nữa.
Rohit Bandil

90

Các câu trả lời ở trên rất hay. Bạn cũng có thể lập trình như thế này nếu bạn muốn

Đầu tiên, bố cục của bạn nên có một ID. Thêm nó bằng cách viết +iddòng sau trong res / layout / *. Xml

<RelativeLayout ...
...
android:id="@+id/your_layout_id"
...
</RelativeLayout>

Sau đó, trong mã Java của bạn, thực hiện các thay đổi sau.

RelativeLayout rl = (RelativeLayout)findViewById(R.id.your_layout_id);
rl.setBackgroundColor(Color.RED);

ngoài điều này ra, nếu bạn có màu được định nghĩa trong colors.xml, thì bạn cũng có thể thực hiện theo chương trình:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));

24
Nếu bạn muốn nó động, tôi nghĩ bạn không thể sử dụng XML.
Guillermo Gutiérrez

1
+1 cho tôi cần thay đổi nó trong thời gian chạy theo cờ trạng thái; Tôi cũng có thể lấy lại màu gốc bằng cách sử dụng hằng số Color.TRANSPARENT.
Zac

10
@ BjarkeFreund-Hansen Ông thừa nhận các câu trả lời khác và cung cấp giải pháp lập trình này. Không downvote xứng đáng.
Anubian Noob

4
@ BjarkeFreund-Hansen, câu hỏi là làm thế nào để đặt nền không làm thế nào để xác định màu sắc, đọc đúng. Và nếu câu hỏi là về điều đó. Tôi thừa nhận điều đó và nói "bạn cũng có thể đi như" .... vì vậy anh ấy có thể đi hoặc không. Ngoài ra nó có thể giúp đỡ người khác như bạn đã thấy. bạn có thể ??
Kẻ giết người Android

7
cộng với một chỉ để bù trừ cho một điểm trừ từ @ BjarkeFreund-Hansen
Rahul

42

Bạn có thể sử dụng android:background="#DC143C"hoặc bất kỳ giá trị RGB nào khác cho màu của bạn. Tôi không có vấn đề gì khi sử dụng nó theo cách này, như đã nêu ở đây


5
-1 vì tôi đã viết rõ ràng "Tôi muốn xác định màu mới mà tôi có thể sử dụng ở nhiều nơi" trong câu hỏi, vì tôi không muốn mã hóa giá trị màu, nhưng xác định đó là tài nguyên tôi có thể sử dụng ở nhiều nơi.
Bjarke Freund-Hansen

6
@GMsoF: Ồ nó không hoạt động nhưng nó không trả lời câu hỏi.
Bjarke Freund-Hansen

21

Các

res/values/colors.xml.

<color name="red">#ffff0000</color>
android:background="@color/red"

ví dụ không làm việc cho tôi, nhưng

android:background="#(hexidecimal here without these parenthesis)"

làm việc cho tôi trong phần tử bố cục tương đối như một thuộc tính.


10
Bạn đã quên bọc thẻ màu bằng thẻ tài nguyên?
bỏ

19

Nếu bạn muốn thay đổi màu nhanh chóng (và bạn không ghi nhớ số Hex), android có một vài màu đặt sẵn mà bạn có thể truy cập như thế này:

android:background="@android:color/black"

Có 15 màu bạn có thể chọn từ đó là màu đẹp để thử nghiệm mọi thứ một cách nhanh chóng và bạn không cần phải thiết lập các tệp bổ sung.

Thiết lập tệp giá trị / colors.xml và sử dụng Hex thẳng như được giải thích ở trên sẽ vẫn hoạt động.


4

4 cách có thể, sử dụng một trong những bạn cần.

1. Kotlin

val ll = findViewById<LinearLayout>(R.id.your_layout_id)
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white))

2. Ràng buộc dữ liệu

<LinearLayout
    android:background="@{@color/white}"

HOẶC tuyên bố hữu ích hơn-

<LinearLayout
    android:background="@{model.colorResId}"

3. XML

<LinearLayout
    android:background="#FFFFFF"

<LinearLayout
    android:background="@color/white"

4. Java

LinearLayout ll = (LinearLayout) findViewById(R.id.your_layout_id);
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white));

2

Android studio 2.1.2 (hoặc có thể sớm hơn) sẽ cho phép bạn chọn từ một bánh xe màu:

Bánh xe màu trong Studio Android

Tôi đã nhận được điều này bằng cách thêm vào sau đây để bố trí của tôi:

android:background="#FFFFFF"

Sau đó, tôi nhấp vào màu FFFFFF và nhấp vào bóng đèn xuất hiện.


1

Kotlin

linearLayout.setBackgroundColor(Color.rgb(0xf4,0x43,0x36))

hoặc là

<color name="newColor">#f44336</color>

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))

0

Các câu trả lời trên hết là tĩnh. Tôi nghĩ rằng tôi sẽ cung cấp một câu trả lời năng động. Hai tệp sẽ cần được đồng bộ hóa là tương đối foo.xmlvới bố cục và activity_bar.javatương ứng với lớp Java tương ứng với điều này R.layout.foo.

Trong foo.xmlthiết lập một id cho toàn bộ bố cục:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/foo" .../>

Và trong activity_bar.javathiết lập màu sắc trong onCreate():

public class activity_bar extends AppCompatActivty {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.foo);

            //Set an id to the layout
        RelativeLayout currentLayout = 
                    (RelativeLayout) findViewById(R.id.foo);

        currentLayout.setBackgroundColor(Color.RED);
        ...
    }
    ...
}

Tôi hi vọng cái này giúp được.

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.