การตั้งค่าสีพื้นหลังขององค์ประกอบเค้าโครง Android


198

ฉันพยายามที่จะค่อนข้างโคลนออกแบบของกิจกรรมนั้นจากชุดของภาพนิ่งในการออกแบบ UI Android อย่างไรก็ตามฉันมีปัญหากับงานง่าย ๆ

ผมได้สร้างรูปแบบตามที่แสดงในภาพและส่วนหัวเป็นในTextView RelativeLayoutตอนนี้ฉันต้องการเปลี่ยนสีพื้นหลังของRelativeLayoutแต่ฉันไม่สามารถหาวิธีได้

ฉันรู้ว่าฉันสามารถตั้งค่าandroid:backgroundคุณสมบัติในRelativeLayoutแท็กในไฟล์ XML แต่ฉันจะตั้งค่ามันเป็นอย่างไร ฉันต้องการกำหนดสีใหม่ที่ฉันสามารถใช้ได้ในหลาย ๆ ที่ มันเป็นdrawableหรือstring?

นอกจากนี้ฉันคาดหวังว่าจะมีวิธีง่ายๆในการออกแบบ Eclipse Android UI ภายในที่ฉันต้องหายไป?

ฉันผิดหวังเล็กน้อยในขณะนี้เนื่องจากควรเป็นกิจกรรมที่ดำเนินการโดยคลิกไม่กี่ครั้งสูงสุด ดังนั้นความช่วยเหลือใด ๆ ที่ชื่นชมมาก :)

การออกแบบกิจกรรม Android


28
ซอฟต์แวร์ใดที่คุณใช้ในการวาดกราฟทางด้านขวา
ลูคัส

8
@ ลูคัส: ฉันไม่ได้วาดไดอะแกรมตามที่ระบุไว้ในคำถามมันมาจากชุดของภาพนิ่งในการออกแบบ UI Android ดูลิงก์ในคำถาม
Bjarke Freund-Hansen

คำตอบ:


280

คุณสามารถใช้ทรัพยากรสีที่เรียบง่ายres/values/colors.xmlตามที่ระบุโดยปกติภายใน

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

android:background="@color/red"และใช้นี้ผ่านทาง สีนี้สามารถใช้ที่อื่นได้เช่นสีตัวอักษร อ้างอิงได้ในรูปแบบ XML getResources().getColor(R.color.red)ในลักษณะเดียวกันหรือได้รับมันในรหัสผ่าน

คุณยังสามารถใช้ทรัพยากร drawableใด ๆเป็นพื้นหลังใช้android:background="@drawable/mydrawable"สำหรับสิ่งนี้ (ซึ่งหมายถึง 9patch drawables บิตแมปปกติ drawable รูปร่าง .. )


6
ทำงานเหมือนจับใจขอบคุณ คุณช่วยชี้ฉันไปที่การอ้างอิงที่ฉันควรอ่านนี้
Bjarke Freund-Hansen

6
เอ่อจริง: ไม่เพียงแค่ค้นหาเอกสารนี้เป็นสิ่งที่หุ่นยนต์มาตรฐานสวย แต่ดูเหมือนว่าไม่มีเอกสารจริงๆ ทั้งแบบฝึกหัดในไซต์ dev หรือตัวอย่าง API ใช้ประโยชน์จากสิ่งนี้ เอกสาร Android ค่อนข้างขาดเมื่อมันมาถึงคุณสมบัติบางอย่าง ฉันคิดว่าฉันหยิบมันขึ้นมาโดยบังเอิญในแบบฝึกหัดภายนอก โดยปกติแล้วมันเป็นความคิดที่ดีที่จะเรียกดูตัวอย่าง API และโครงการตัวอย่าง คุณสามารถค้นหารหัสภายในANDROID_SDK\samplesโฟลเดอร์ (สำหรับ Android รุ่นต่าง ๆ ) แอพตัวอย่าง API ทั้งหมดมาติดตั้งไว้ล่วงหน้าในทุกอินสแตนซ์อีมูเลเตอร์

2
เพียงแค่ตรวจสอบตัวออกแบบ UI ไม่พบอะไรง่าย แต่ฉันแนะนำให้เขียนสิ่งต่าง ๆ ด้วยมือใน xml ต่อไป นักออกแบบปรับปรุงเร็ว ๆ นี้ แต่ฉันยังไม่สามารถใช้งานได้ในความคิดของฉัน ไม่เพียง แต่บางตัวเลือก จำกัด รูปแบบบางครั้งมีลักษณะที่แตกต่างกันอย่างสมบูรณ์บนอุปกรณ์จริง(โดยเฉพาะอย่างยิ่งเมื่อมีการใช้ทรัพยากร drawable อ้างอิง. พวกเขาไม่ได้รับการปรับขนาดได้อย่างถูกต้องหรือแม้จะไม่ได้แสดงที่ทุกคนในประสบการณ์ของผม) ทดสอบเลย์เอาต์ของคุณบนอุปกรณ์ของคุณหรือบนอีมูเลเตอร์

1
สำหรับบางสี "ค่าเริ่มต้น" คุณสามารถใช้ไวยากรณ์นี้: android: background = "@ android: color / white"
dalf

1
getResources (). getColor () เลิกใช้แล้วในขณะนี้
Rohit Bandil

90

คำตอบข้างต้นเป็นสิ่งที่ดีนอกจากนี้คุณยังสามารถทำสิ่งนี้ได้ตามต้องการหากคุณต้องการ

ก่อนอื่นเค้าโครงของคุณควรมี ID เพิ่มโดยการเขียน+idบรรทัดต่อไปนี้ใน res / layout / *. xml

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

จากนั้นในโค้ด Java ของคุณทำการเปลี่ยนแปลงดังต่อไปนี้

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

นอกเหนือจากนี้ถ้าคุณมีสีที่กำหนดไว้ใน colors.xml คุณก็สามารถทำตามโปรแกรมได้:

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

24
หากคุณต้องการให้เป็นแบบไดนามิกฉันคิดว่าคุณไม่สามารถใช้ XML
Guillermo Gutiérrez

1
+1 สำหรับฉันต้องเปลี่ยนมันขณะใช้งานจริงตามสถานะธง ฉันยังสามารถเรียกคืนสีดั้งเดิมได้ด้วยการใช้ค่าคงที่ Color.TRANSPARENT
Zac

10
@ BjarkeFreund-Hansen เขายอมรับคำตอบอื่น ๆ และนำเสนอวิธีแก้ปัญหาเชิงโปรแกรมนี้ ไม่ลงคะแนนคุ้มค่า
Anubian Noob

4
@ BjarkeFreund-Hansen คำถามคือวิธีการตั้งค่าพื้นหลังไม่ใช่วิธีการกำหนดสีอ่านอย่างถูกต้อง แล้วถ้าเกิดคำถามขึ้นมา ฉันรับทราบและบอกว่า "คุณสามารถไปได้เหมือนกัน" .... ดังนั้นเขาอาจไปหรือไม่ก็ได้ นอกจากนี้ยังอาจช่วยให้ผู้อื่นตามที่คุณเห็นอยู่แล้ว คุณสามารถ ??
Android Killer

7
บวกหนึ่งเพียงเพื่อชดเชยลบหนึ่งจาก @ BjarkeFreund-Hansen
Rahul

42

คุณสามารถใช้android:background="#DC143C"หรือค่าRGBอื่น ๆสำหรับสีของคุณ ฉันไม่มีปัญหาในการใช้วิธีนี้ตามที่ระบุไว้ที่นี่


5
-1 เพราะฉันเขียนอย่างชัดเจนว่า "ฉันต้องการกำหนดสีใหม่ที่ฉันสามารถใช้ในหลาย ๆ ที่" ในคำถามเพราะฉันไม่ต้องการ hardcode ค่าสี แต่กำหนดเป็นทรัพยากรที่ฉันสามารถใช้ในหลายสถานที่
Bjarke Freund-Hansen

6
@GMsoF: โอ้มันใช้งานได้ แต่มันไม่ตอบคำถาม
Bjarke Freund-Hansen

21

The

res/values/colors.xml.

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

ตัวอย่างไม่ทำงานสำหรับฉัน แต่

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

ทำงานให้ฉันในองค์ประกอบเค้าโครงที่สัมพันธ์กันเป็นแอตทริบิวต์


10
คุณลืมห่อแท็กสีด้วยแท็กทรัพยากรหรือไม่
elimirks

19

หากคุณต้องการเปลี่ยนสีอย่างรวดเร็ว (และคุณไม่มีเลขฐานสิบหกที่จดจำ) android มีสีที่กำหนดไว้ล่วงหน้าไม่กี่สีที่คุณสามารถเข้าถึงได้เช่นนี้:

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

มี 15 สีให้คุณเลือกซึ่งเหมาะสำหรับการทดสอบสิ่งต่าง ๆ อย่างรวดเร็วและคุณไม่จำเป็นต้องตั้งค่าไฟล์เพิ่มเติม

การตั้งค่าไฟล์ค่า / colors.xml และการใช้ Hex แบบตรงตามที่อธิบายไว้ข้างต้นจะยังคงใช้ได้


4

4 วิธีที่เป็นไปได้ใช้วิธีที่คุณต้องการ

1. Kotlin

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

2. การผูกข้อมูล

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

หรือมีประโยชน์มากกว่างบ -

<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 (หรืออาจเร็วกว่านี้) จะให้คุณเลือกจากวงล้อสี:

วงล้อสีใน Android Studio

ฉันได้สิ่งนี้โดยการเพิ่มสิ่งต่อไปนี้ลงในเค้าโครงของฉัน:

android:background="#FFFFFF"

จากนั้นฉันคลิกที่สี FFFFFF และคลิกหลอดไฟที่ปรากฏขึ้น


1

Kotlin

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

หรือ

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

-

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

0

คำตอบข้างต้นทั้งหมดเป็นแบบคงที่ ฉันคิดว่าฉันจะให้คำตอบแบบไดนามิก แฟ้มที่สองที่จะต้องมีการซิงค์เป็นญาติfoo.xmlกับรูปแบบและactivity_bar.javaซึ่งสอดคล้องกับระดับที่สอดคล้องกับ Java R.layout.fooนี้

ในการfoo.xmlตั้ง id สำหรับเค้าโครงทั้งหมด:

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

และในการactivity_bar.javaตั้งค่าสีใน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);
        ...
    }
    ...
}

ฉันหวังว่านี่จะช่วยได้.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.