วิธีการตั้งค่าสีพื้นหลังของมุมมอง


179

ฉันกำลังพยายามตั้งค่าสีพื้นหลังของมุมมอง (ในกรณีนี้คือปุ่ม)

ฉันใช้รหัสนี้:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

มันทำให้ปุ่มหายไปจากหน้าจอ ฉันทำอะไรผิดและวิธีที่ถูกต้องในการเปลี่ยนสีพื้นหลังในมุมมองใด ๆ คืออะไร

ขอบคุณ


1
ที่ดูถูกต้อง ที่จริงแล้วฉันไม่คิดว่าคุณต้องโทรหาโมฆะ () เมื่อคุณพูดว่าปุ่มหายไปคุณหมายถึงว่าแท้จริงหรือคุณหมายถึงปุ่มมีข้อความหรือภาพที่มันหายไป?
RickNotFred

คำตอบ:


281

คุณทำให้ปุ่มของคุณโปร่งใส ไบต์แรกคืออัลฟา

ลอง v.setBackgroundColor(0xFF00FF00);


2
คำตอบของ EddieB ด้านล่างนั้นดีกว่ามากเพราะจะเป็นการลบเส้นขอบใด ๆ ออกไปเช่นการขีดเส้นใต้ของ EditText
Molten Ice

@aroth เป็นสีที่ดีกว่าสีเขียว? ถ้าฉันต้องการสีที่ซับซ้อนกับ argb? ... คำตอบของคุณเลิกใช้แล้ว
delive

2
@delive - กลับมาอีกเหรอ? Color.GREENจะไม่เลิกและรวมถึงไบต์อัลฟา มูลค่ามันเป็น0xff00ff00, ตรงเช่นเดียวกับสิ่งที่ชี้ให้เห็นในคำตอบยกเว้นก็ยังมีผลประโยชน์ของการเป็นมนุษย์สามารถอ่านได้ นักพัฒนาส่วนใหญ่ต้องการโซลูชันที่มนุษย์อ่านได้
aroth

145

เมื่อคุณเรียกใช้ setBackgoundColor มันจะเขียนทับ / ลบทรัพยากรพื้นหลังใด ๆ ที่มีอยู่รวมถึงเส้นขอบ, มุม, ช่องว่างภายใน ฯลฯ สิ่งที่คุณต้องการทำคือเปลี่ยนสีของทรัพยากรพื้นหลังที่มีอยู่ ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

ทดลองกับ PorterDuff.Mode. * สำหรับเอฟเฟกต์ต่าง ๆ


"เขียนทับ / ลบทรัพยากรพื้นหลังใด ๆ ที่มีอยู่" ไม่ได้จริงๆ
Yousha Aleayoub

2
ฉันต้องใช้ข้างต้นพร้อมกับ v.invalidate (); ในบรรทัดถัดไป
Hashim Akhtar

1
ลองใช้เวลาที่สูญเปล่าและไปพร้อมกับคำตอบที่ยอมรับ v.getBackground () ให้ข้อยกเว้น nullpointer และขัดข้อง
Siddarth G

สิ่งนี้บวกกับ PorterDuff.Mode.SRC_IN แก้ไขให้ฉันแล้วฉันจะไม่ทำให้เส้นขอบฉากหลังหายไป
Guilherme Carvalho

123

มีหลายทางเลือกในการทำเช่นนี้ ...

ตั้งค่าพื้นหลังเป็นสีเขียว:

v.setBackgroundColor(0x00FF00);

ตั้งค่าพื้นหลังเป็นสีเขียวด้วยAlpha :

v.setBackgroundColor(0xFF00FF00);

ตั้งค่าพื้นหลังเป็นสีเขียวด้วยค่าคงที่ Color.GREEN:

v.setBackgroundColor(Color.GREEN);

ตั้งค่าพื้นหลังเป็นสีเขียวที่กำหนดในColors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

และการใช้:

v.setBackgroundResource(R.color.myGreen);

และ:

v.setBackgroundResource(R.color.myGreenWithAlpha);

หรืออีกต่อไปยืดเยื้อ:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

และ:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));

getResources().getColor(...)ได้เลิกใช้stackoverflow.com/questions/31842983/…
Junior Mayhé

5
นอกจากนี้ยังมี: v.setBackgroundResource(R.color.myGreen);เมื่อใช้colors.xml
น่ากลัว

ลบการinvalidateโทรออกตามที่คุณเห็น setBackground...วิธีการโทรแล้ว
weston

v.setBackgroundColor(0x00FF00);เป็นเพียงรหัสของพวกเขาซึ่งพวกเขาบอกว่าไม่ทำงาน ฉันก็คาดหวังว่ามันจะโปร่งใส
weston

35

คุณสามารถตั้งค่า hex-color เป็นทรัพยากรใด ๆ ด้วย:

View.setBackgroundColor(Color.parseColor("#e7eecc"));

16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

รหัสไม่ได้ตั้งปุ่มเป็นสีเขียว แต่มันทำให้ปุ่มมองไม่เห็นโดยสิ้นเชิง

คำอธิบาย: ค่าฐานสิบหกของสีผิด ด้วยค่าอัลฟ่าศูนย์, สีจะมองไม่เห็น

ค่าฐานสิบหกที่ถูกต้อง0xFF00FF00สำหรับสีเขียวทึบ ค่า Alpha ใด ๆ ระหว่าง 00 ถึง FF จะทำให้เกิดความโปร่งใส


12

และวิธีที่ถูกต้องในการเปลี่ยนสีพื้นหลังในมุมมองใด ๆ คืออะไร?

เมื่อวันที่ใด View ? สิ่งที่คุณมีถูกต้องแม้ว่าคุณควรวางinvalidate()สาย

อย่างไรก็ตามบางคนViewsมีภูมิหลังอยู่แล้ว Buttonตัวอย่างเช่นA มีพื้นหลังอยู่แล้ว: ใบหน้าของปุ่มนั้น พื้นหลังนี้เป็นสิ่งStateListDrawableที่คุณสามารถพบได้ในandroid-2.1/data/res/drawable/btn_default.xmlการติดตั้ง Android SDK ในทางกลับกันหมายถึงรูปภาพบิตแมปเก้าชิ้นที่มีให้เลือกในหลายความหนาแน่น คุณจะต้องโคลนและปรับเปลี่ยนสิ่งเหล่านั้นเพื่อให้บรรลุเป้าหมายสีเขียวของคุณ

ในระยะสั้นที่คุณจะได้รับการบริการที่ดีขึ้นในการหารูปแบบ UI Buttonอื่นมากกว่าความพยายามที่จะเปลี่ยนพื้นหลังของการเป็น


ตกลงขอบคุณสำหรับคำอธิบายเกี่ยวกับพื้นหลังปุ่ม บิตแมปแพทช์เก้าตัว ( developer.android.com/reference/android/graphics/NinePatch.html ) เป็นของใหม่สำหรับฉัน ฉันแค่ต้องการเปลี่ยนสีของสิ่งใด ๆ บนหน้าจอเมื่อฉันกดปุ่ม ปุ่มต่างๆอยู่ใน TextView พยายามเปลี่ยนสีของข้อความนั้นนำไปสู่ข้อความคอนโซล "การแจกจ่าย DDM reg หมดเวลารอ ... กิจกรรมผู้จัดการ: ไม่สามารถส่งก้อน DDM 52454151: ไม่มีตัวจัดการกำหนด" และกล่องโต้ตอบบนหน้าจอ "แอปหยุดโดยไม่คาดคิด" เดาฉันต้องอ่านเพิ่มเติมเกี่ยวกับ UI คำแนะนำใด ๆ ยินดีต้อนรับ ขอบคุณ
Peter vdL

12

สำหรับการตั้งค่าสีแรกที่จะเห็นบนหน้าจอคุณสามารถทำได้ใน layout.xml ที่เกี่ยวข้อง (การออกแบบที่ดีกว่า) โดยการเพิ่มคุณสมบัตินี้ในมุมมองที่เกี่ยวข้อง:

android:background="#FF00FF00"

คำถามชัดเจนว่าการเปลี่ยนสีต้องเป็นแบบไดนามิก
Peter


6

ฉันใช้ที่ API ขั้นต่ำ 16 เป้าหมาย 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));

มักจะมีสีเริ่มต้นไม่มาก สีใหม่ที่สามารถกำหนดไว้ในความละเอียด / ค่า / สีตามที่อธิบายไว้ที่นี่developer.android.com/samples/BasicMediaRouter/res/values/...
Krystian



4

คำถามนี้พูดถึงการเปลี่ยนสีพื้นหลังของมุมมอง ในหนึ่งในคำตอบนั้นบุคคลนั้นจะอธิบายวิธีการเปลี่ยนสีพื้นหลังในขณะใช้งาน เห็นได้ชัดว่าคุณกำลังมองหาวิธีการปรับเปลี่ยนวัตถุอื่น ๆ บนหน้าจอ แต่สิ่งนี้จะช่วยให้คุณเริ่มต้นอย่างดีโดยอย่างน้อยช่วยให้คุณสามารถปรับเปลี่ยนสีพื้นหลังของมุมมองเมื่อคลิกปุ่ม




2

ในkotlinคุณสามารถทำสิ่งนี้ได้:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

getColorCompat()ฟังก์ชันส่วนขยายอยู่ที่ไหน:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)

1
view.setBackgroundColor(R.color.primaryColor);

เพิ่มสีให้กับค่าสีก่อนหน้าดังนั้นฉันจึงมีสีอื่น

อะไรที่เหมาะกับฉันคือ:

view.setBackgroundResource(R.color.primaryColor);

1

อนุญาตสมมติว่าเรามีสีหลักในvalues=>colors.xmlนาม:

<resources>
    <color name="primary">#FDD835</color>
</resources>

ดังนั้นหากเราต้องการใช้สีที่กำหนดเองของเราลงไปsetBackgroundColor(@ColorInt int Color)เราก็แค่ต้องการคำอธิบาย@SuppressLint("ResourceAsColor")ประกอบด้วย constructor / method ซึ่งจะใช้เป็น:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }

0

คุณต้องผ่านการintโต้แย้ง

ตัวอย่างแรก:

view.setBackgroundColor(-500136)

ตัวอย่างที่สอง:

int colorId = R.color.green;

view.setBackgroundResource(colorId);


0

ฉันลองทุกวิธีข้างต้น แต่ฉันยังไม่บรรลุสิ่งที่ฉันต้องการ นี่คือความพยายามของฉัน หากคุณใช้ hexcode สำหรับสีและต้องการตั้งค่าสีเป็นพื้นหลังของภาพนี่คือรหัส kotlin

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.