ฉันจะลบพื้นหลังสีดำออกจากกล่องโต้ตอบใน Android ได้อย่างไร รูปแสดงให้เห็นถึงปัญหา
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
ฉันจะลบพื้นหลังสีดำออกจากกล่องโต้ตอบใน Android ได้อย่างไร รูปแสดงให้เห็นถึงปัญหา
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
คำตอบ:
เพิ่มรหัสนี้
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
หรืออันนี้แทน:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
<style name="NewDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
ใช้ในจาวา
Dialog dialog = new Dialog(this, R.style.NewDialog);
ฉันหวังว่าจะช่วยคุณ!
ฉันได้พบกับปัญหาที่ง่ายขึ้นและวิธีการแก้ปัญหาที่ฉันเกิดขึ้นก็คือการใช้ชุดรูปแบบ bachground ที่โปร่งใส เขียนบรรทัดเหล่านี้ในสไตล์ของคุณ
<item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<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>
แล้วเพิ่ม
android:theme="@style/Theme.Transparent"
ในไฟล์รายการหลักของคุณภายในบล็อกของกิจกรรมโต้ตอบ
รวมอยู่ในชุด XML กิจกรรมการโต้ตอบของคุณ
android:background= "#00000000"
วิธีแก้ปัญหา Zacharias ไม่ได้ผลสำหรับฉันดังนั้นฉันได้ใช้ชุดรูปแบบด้านล่างเพื่อแก้ไขปัญหานี้ ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
หนึ่งสามารถตั้งค่าชุดรูปแบบนี้เพื่อโต้ตอบดังนี้
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
สนุก!!
คุณสามารถใช้:
setBackgroundDrawable(null);
วิธีการและต่อไปนี้เป็นเอกสาร:
/**
* Set the background to a given Drawable, or remove the background. If the
* background has padding, this View's padding is set to the background's
* padding. However, when a background is removed, this View's padding isn't
* touched. If setting the padding is desired, please use
* {@link #setPadding(int, int, int, int)}.
*
* @param d The Drawable to use as the background, or null to remove the
* background
*/
กล่องโต้ตอบป็อปอัพเติมสีพื้นหลังสีดำเริ่มต้นหรือสีธีมดังนั้นคุณต้องตั้งค่าTRANSPARENT
พื้นหลังเป็นไดอะล็อก ลองรหัสด้านล่าง: -
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();
ถ้าคุณต้องการทำลายพื้นหลังสีเข้มของกล่องโต้ตอบใช้สิ่งนี้
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
ปัญหาหนึ่งที่ฉันพบพร้อมกับคำตอบที่มีอยู่ทั้งหมดคือขอบจะไม่ถูกรักษาไว้ นี่เป็นเพราะพวกเขาทั้งหมดแทนที่android:windowBackground
คุณลักษณะซึ่งเป็นผู้รับผิดชอบต่อระยะขอบด้วยสีทึบ อย่างไรก็ตามฉันทำการขุดใน Android SDK และพบว่าพื้นหลังหน้าต่างเริ่มต้นเป็นไปได้และปรับเปลี่ยนเล็กน้อยเพื่อให้มีกล่องโต้ตอบโปร่งใส
ก่อนอื่นให้คัดลอก /platforms/android-22/data/res/drawable/dialog_background_material.xml ไปยังโครงการของคุณ หรือเพียงแค่คัดลอกบรรทัดเหล่านี้ไปยังไฟล์ใหม่:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
ขอให้สังเกตว่ามีการตั้งค่าandroid:color
?attr/colorBackground
นี่เป็นค่าเริ่มต้นสีเทา / ขาวทึบที่คุณเห็น ที่จะช่วยให้สีที่กำหนดไว้ในandroid:background
ในสไตล์ของคุณเองให้เกิดความโปร่งใสและแสดงความโปร่งใสทั้งหมดที่เราต้องทำคือการเปลี่ยนแปลงไป?attr/colorBackground
@android:color/transparent
ตอนนี้มันจะเป็นดังนี้:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>
</inset>
หลังจากนั้นไปที่ธีมของคุณและเพิ่มสิ่งนี้:
<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
<item name="android:windowBackground">@drawable/newly_created_background_name</item>
<item name="android:background">@color/some_transparent_color</item>
</style>
ตรวจสอบให้แน่ใจว่าได้แทนที่newly_created_background_name
ด้วยชื่อจริงของไฟล์ drawable ที่คุณเพิ่งสร้างขึ้นและแทนที่some_transparent_color
ด้วยพื้นหลังโปร่งใสที่ต้องการ
หลังจากนั้นสิ่งที่เราต้องทำคือกำหนดธีม ใช้สิ่งนี้เมื่อสร้างAlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
จากนั้นเพียงสร้างสร้างและแสดงข้อความโต้ตอบตามปกติ!
โซลูชันเดียวกับ zGnep แต่ใช้ xml:
android:background="@null"
ลองในรหัสของคุณ:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
มันจะทำงานได้อย่างแน่นอน ... ในกรณีของฉัน ... ! frend ของฉัน
นี่คือสิ่งที่ฉันทำเพื่อให้เกิดความโปร่งใสด้วย AlertDialog
สร้างสไตล์ที่กำหนดเอง:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
จากนั้นสร้างกล่องโต้ตอบด้วย:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
ในโซลูชันเคสของฉันทำงานเช่นนี้:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
และนอกจากนี้ใน Xml ของกล่องโต้ตอบแบบกำหนดเอง:
android:alpha="0.8"
ใช้รหัสนี้ใช้งานได้กับฉัน:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
ตั้งรหัสสไตล์เหล่านี้ในสไตล์
<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>
และเพียงแค่เปลี่ยน false เป็นจริงด้านล่างบรรทัด
<item name="android:backgroundDimEnabled">true</item>
มันจะหรี่พื้นหลังของคุณ
ข้อควรระวัง:อย่าใช้ตัวสร้างสำหรับการเปลี่ยนพื้นหลัง
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
เปลี่ยนไป
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
เมื่อใช้ Dialog.builder จะไม่มีgetWindow()
ตัวเลือกให้
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
นี่คือวิธีของฉันคุณสามารถลอง!
ในกรณีที่คุณขยายDialogFrament
คลาสคุณสามารถกำหนดธีมด้วย:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
จากนั้นสร้างธีมที่กำหนดเองในไฟล์ styles.xml ของคุณ (ดูคำตอบของ @ LongLv สำหรับพารามิเตอร์)
อย่าลืมเพิ่ม<item name="android:windowCloseOnTouchOutside">true</item>
ถ้าคุณต้องการให้กล่องโต้ตอบปิดถ้าผู้ใช้สัมผัสนอกกล่องโต้ตอบ
สำหรับทุกคนที่ใช้ไดอะล็อกที่กำหนดเองพร้อมคลาสที่กำหนดเองคุณต้องเปลี่ยนความโปร่งใสในคลาสเพิ่มบรรทัดนี้ใน onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow (). setBackgroundDrawable (ใหม่ ColorDrawable (ContextCompat.getColor (ctx, android.R.color.transparent)))
ตรวจสอบให้แน่ใจว่าR.layout.themechanger
ไม่มีสีพื้นหลังเพราะโดยค่าเริ่มต้นกล่องโต้ตอบจะมีสีพื้นหลังเริ่มต้น
คุณต้องเพิ่ม dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
และในที่สุดก็
<style name="TransparentDialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
</style>