ฉันต้องการสร้างกิจกรรมที่โปร่งใสด้านบนของกิจกรรมอื่น
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
ฉันต้องการสร้างกิจกรรมที่โปร่งใสด้านบนของกิจกรรมอื่น
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คำตอบ:
เพิ่มสไตล์ต่อไปนี้ในres/values/styles.xml
ไฟล์ของคุณ(หากคุณยังไม่มีให้สร้างมัน) นี่คือไฟล์ที่สมบูรณ์:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
(ค่า@color/transparent
คือค่าสี#00000000
ที่ฉันใส่ไว้ในres/values/color.xml
ไฟล์คุณยังสามารถใช้@android:color/transparent
ใน Android รุ่นที่ใหม่กว่า)
จากนั้นใช้สไตล์กับกิจกรรมของคุณเช่น:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
ตั้งค่าเป็นจริง ลบคุณสมบัตินี้เพื่อทำตัวเหมือนกิจกรรมปกติ (ในกรณีนี้มันจะจับคู่android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
กิจกรรมของฉันได้มาจาก ดังนั้นparent="android:Theme"
เป็น crashing app ของฉัน ฉันเพิ่งลบมันออกไปและมันก็ทำงานได้เหมือนมีเสน่ห์ ขอบคุณ!
มันจะเป็นเช่นนี้:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
user1129443: แต่ละองค์ประกอบ (A, R, G, B) สามารถรับค่า0-255
ได้ 50% of 255 = 127. 127 in Hex = 7F
วิธีการคำนวณความโปร่งใส (ความทึบ)
ใน styles.xml:
<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
<item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
ใน AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
แทน
background
และใส่สีกึ่งโปร่งใสที่คุณต้องการในwindowBackground
กำหนดธีมโปร่งแสงให้กับกิจกรรมที่คุณต้องการทำให้โปร่งใสในไฟล์รายการ Android ของโครงการของคุณ:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
ฉันต้องการที่จะเพิ่มลงในนี้เล็กน้อยเพราะฉันเป็นนักพัฒนา Android ใหม่เช่นกัน คำตอบที่ยอมรับนั้นยอดเยี่ยม แต่ฉันเจอปัญหาบางอย่าง ฉันไม่แน่ใจว่าจะเพิ่มสีลงในไฟล์ colors.xml ได้อย่างไร นี่คือวิธีที่ควรทำ:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
ในไฟล์ colors.xml ดั้งเดิมของฉันฉันมีแท็ก "drawable":
<drawable name="class_zero_background">#7f040000</drawable>
ดังนั้นฉันก็ทำเช่นนั้นสำหรับสีด้วย แต่ฉันไม่เข้าใจว่าการอ้างอิง "@ color /" หมายถึงมองหาแท็ก "สี" ใน XML ฉันคิดว่าฉันควรพูดถึงสิ่งนี้เช่นกันเพื่อช่วยเหลือผู้อื่น
ฉันทำได้ใน 2.3.3 โดยเพียงเพิ่มandroid:theme="@android:style/Theme.Translucent"
ในแท็กกิจกรรมในรายการ
ฉันไม่รู้เกี่ยวกับรุ่นที่ต่ำกว่า ...
AppCompatActivity
หากคุณกำลังใช้สิ่งนี้
ในกรณีของฉันฉันต้องตั้งค่าธีมบนรันไทม์ใน java ตามเงื่อนไขบางประการ ดังนั้นฉันจึงสร้างธีมหนึ่งแบบ (คล้ายกับคำตอบอื่น):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
จากนั้นใน Java ฉันใช้กับกิจกรรมของฉัน:
@Override
protected void onCreate(Bundle savedInstanceState) {
String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
if (email != null && !email.isEmpty()) {
// We have the valid email ID, no need to take it from user,
// prepare transparent activity just to perform bg tasks required for login
setTheme(R.style.Theme_Transparent);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
} else
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dummy);
}
จำได้ว่าหนึ่งในจุดที่สำคัญที่นี่: คุณต้องเรียกใช้ฟังก์ชั่นก่อนsetTheme()
super.onCreate(savedInstanceState);
ฉันพลาดจุดนี้และติดขัดเป็นเวลา 2 ชั่วโมงโดยคิดว่าทำไมรูปแบบของฉันจึงไม่สะท้อนให้เห็นในเวลาทำงาน
ในฟังก์ชั่นonCreateใต้setContentViewให้เพิ่มบรรทัดนี้:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
เพียงให้ภาพพื้นหลังของกิจกรรมมีความโปร่งใส หรือเพิ่มธีมในไฟล์ XML:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
วิธีที่ง่ายที่สุดที่ฉันได้พบคือการกำหนดรูปแบบของกิจกรรมใน AndroidManifest android:theme="@android:style/Theme.Holo.Dialog"
ไป
จากนั้นในกิจกรรมของวิธี onCreate getWindow().setBackgroundDrawable(new ColorDrawable(0));
โทร
สำหรับกิจกรรมการโต้ตอบฉันใช้สิ่งนี้:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
แต่คุณต้องตั้งค่ามุมมองหลักของคุณในกิจกรรมให้มองไม่เห็น มิฉะนั้นจะมองไม่เห็นพื้นหลังในขณะที่มุมมองทั้งหมดในนั้นจะมองเห็นได้
นอกเหนือจากคำตอบข้างต้น:
เพื่อหลีกเลี่ยงความผิดพลาดที่เกี่ยวข้องกับ Android Oreo เกี่ยวกับกิจกรรม
<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
<activity
android:name="xActivity"
android:theme="@style/AppTheme.Transparent" />
ฉันเพิ่งทำสองสิ่งและทำให้กิจกรรมของฉันโปร่งใส พวกเขาอยู่ด้านล่าง
ในไฟล์รายการฉันเพิ่งเพิ่มโค้ดด้านล่างในแท็กกิจกรรม
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
และฉันเพิ่งตั้งพื้นหลังของเค้าโครงหลักสำหรับกิจกรรมนั้นเป็น " # 80000000 " ชอบ
android:background="#80000000"
มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน
หากคุณกำลังใช้อยู่ให้AppCompatActivity
เพิ่มสิ่งนี้ในstyles.xml
<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
ในmanifest
ไฟล์คุณสามารถเพิ่มธีมนี้ในแท็กกิจกรรมเช่นนี้
android:theme="@style/TransparentCompat"
สำหรับรายละเอียดเพิ่มเติมอ่านบทความนี้
กำหนดธีมโปร่งแสง
android:theme="@android:style/Theme.Translucent.NoTitleBar"
การใช้Theme.NoDisplay
จะยังคงทำงานอยู่… แต่เฉพาะกับอุปกรณ์ Android รุ่นเก่า บน Android 6.0 และสูงกว่าการใช้ Theme.NoDisplay โดยไม่ต้องโทรfinish()
เข้าonCreate() (or, technically, before onResume())
จะทำให้แอปของคุณขัดข้อง นี่คือเหตุผลที่แนะนำให้ใช้Theme.Translucent.NoTitleBar
ซึ่งไม่ได้รับผลกระทบจากข้อ จำกัดนี้ "
หมายเหตุ 1: ในโฟลเดอร์ Drawable สร้าง test.xml และคัดลอกรหัสต่อไปนี้
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke android:width="2dp" />
<gradient
android:angle="90"
android:endColor="#29000000"
android:startColor="#29000000" />
<corners
android:bottomLeftRadius="7dp"
android:bottomRightRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
// หมายเหตุ: มุมและรูปร่างเป็นไปตามความต้องการของคุณ
// หมายเหตุ 2: สร้าง xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/test"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.09"
android:gravity="center"
android:background="@drawable/transperent_shape"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
เพียงเพิ่มบรรทัดต่อไปนี้ในแท็กกิจกรรมในไฟล์รายการที่ต้องดูโปร่งใส
android:theme="@android:style/Theme.Translucent"
คำตอบทั้งหมดนั้นอาจสร้างความสับสนมีความแตกต่างระหว่างกิจกรรมโปร่งใสและไม่มีกิจกรรม UI
ใช้สิ่งนี้:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
จะทำให้กิจกรรมโปร่งใส แต่จะบล็อก UI
หากคุณต้องการกิจกรรมไม่มี UI มากกว่าใช้สิ่งนี้:
android:theme="@android:style/Theme.NoDisplay"
คุณสามารถลบจากการดำเนินกิจกรรมและการตั้งค่ารูปแบบของคุณเป็นsetContentView(R.layout.mLayout)
android:theme="@style/AppTheme.Transparent"
ตรวจสอบลิงค์นี้สำหรับรายละเอียดเพิ่มเติม
<item name="android:windowBackground">@android:color/transparent</item>