programing

Android에서 배경이 투명한 대화 상자

muds 2023. 8. 24. 22:30
반응형

Android에서 배경이 투명한 대화 상자

Android의 대화 상자에서 검은색 배경을 제거하려면 어떻게 해야 합니까?이 사진은 문제를 보여줍니다.

enter image description here

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);

TL;DR; 먼저 두 가지만 있으면 됩니다.style다음과 같은 작업을 수행합니다.

<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>

번째로, 100% 확실하게 말해주세요.style생성자에게 전달하여 대화 상자에 적용됩니다.

전체 예

<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>

Java에서 사용:

Dialog dialog = new Dialog(this, R.style.NewDialog);

도움이 되길 바랍니다!

저는 더 간단한 문제에 직면했고 제가 생각해낸 해결책은 투명한 바흐그라운드 테마를 적용하는 것이었습니다. 이 대사들을 당신의 스타일로 쓰세요.

    <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); 

맛있게 드세요!!

만약 당신이 대화상자의 어두운 배경을 파괴하고 싶다면, 이것을 사용하세요.

dialog.getWindow().setDimAmount(0);

기본 설해야정 하 기 검 색 채 테 는 대 우 화 상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();

다음을 사용할 수 있습니다.

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
    */

기존의 모든 답변에서 제가 발견한 한 가지 문제는 마진이 보존되지 않는다는 것입니다.그 이유는 그들이 모두 그것을 무시하기 때문입니다.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의 사용자 에서, 할은 투하고투을보여위기스서맞에타일춤당신다명것입, 니가해변는하화일은할야우리형의해명성주▁in▁we다▁change▁to▁style▁have투니입것.?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합니다.some_transparent_color원하는 투명한 배경으로.

그 후에 우리가 해야 할 일은 주제를 정하는 것입니다.▁the를 만들 때 합니다.AlertDialog.Builder:

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

그런 다음 평소처럼 대화 상자를 만들고 만들고 표시합니다!

주의: 배경 변경에 빌더를 사용하지 마십시오.

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();

대화 상자를 사용하는 경우.건설업자, 그것은 주지 않습니다.getWindow()옵션이 있습니다.

코드로 시도해 보십시오.

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

분명히 효과가 있을 겁니다...내 경우에는...! 내 친구.

zGnep과 동일한 솔루션이지만 xml을 사용합니다.

android:background="@null"

이것은 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 dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();

사용할 수 있습니다.

dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)

이걸 재사용해야 한다면,

확장 기능을 만드는 것을 추천합니다.비슷한 것extensions.kt

import android.app.Dialog

fun Dialog.setTransparentBackground() {
    window?.setBackgroundDrawableResource(android.R.color.transparent)
}

그리고 그것을 아무 대화에서나 전화로 사용합니다.

dialog.setTransparentBackground()

재미있는 프로그래밍...

당신이 연장한 경우.DialogFrament클래스에서 다음을 사용하여 테마를 설정할 수 있습니다.

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

그런 다음 styles.xml 파일에서 사용자 지정 테마를 만듭니다(파라미터는 @LongLv의 답변 참조).

추가하는 것을 잊지 마십시오.<item name="android:windowCloseOnTouchOutside">true</item>사용자가 대화 상자 외부를 터치하는 경우 대화 상자를 닫으려면 이 옵션을 선택합니다.

스타일 코드를 스타일로 설정

<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>

그리고 단순히 거짓을 아래 라인의 참으로 변경합니다.

<item name="android:backgroundDimEnabled">true</item>

그것은 당신의 배경을 어둡게 할 것입니다.

저의 경우, 투명한 배경을 적용할 수 있는 어떤 것도 작동하지 않았습니다.

시작()의 대화 상자에서 사용한 것만:

dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

하지만 효과가 없었습니다.styles.xml을 확인했는데 문제와 연결된 것이 없습니다.

마지막으로 대화 상자가 생성되는 방식을 확인하던 중 대화 상자 조각을 요청할 때마다 탐색 구성 요소가 대화 상자를 생성하고 있다는 것을 발견했습니다.

navgraph.xml의 XML에서 대화 상자 조각을 조각으로 정의하여 대화 상자 대신 조각으로 만들었습니다.그 조각을 대화상자로 바꾸면서 모든 것이 제자리에 놓이게 되었습니다.

BTW: 탐색 편집기의 GUI에서는 fragment에서 dialog로 수정할 수 없습니다.코드를 수동으로 변경해야 합니다.

대화 상자에 대한 일부 효과가 런타임에 반영되지 않을 때 이 문제가 발생할 수 있습니다.

이 경우 솔루션은 다음과 같이 작동합니다.

final Drawable drawable = new ColorDrawable(android.graphics.Color.TRANSPARENT);
dialogAssignTag.getWindow().setBackgroundDrawable(drawable);

또한 사용자 지정 대화 상자의 xml 파일에서 다음을 수행합니다.

android:alpha="0.8"

만약 당신이 Kotlin을 사용한다면, 이 코드는 당신에게 도움이 될 것입니다:

dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

이것은 내 방식입니다, 당신은 시도할 수 있습니다!

사용자 정의 클래스가 있는 사용자 정의 대화 상자를 사용하는 사용자의 경우 클래스의 투명도를 변경해야 합니다. onCreate()에 다음 행을 추가합니다.

getWindow().setBackgroundDrawableResource(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>
ColorDrawable drawable = new ColorDrawable(ContextCompat.getColor(ctx, android.R.color.transparent));
dialog.getWindow().setBackgroundDrawable(drawable);

코틀린에서는 다음 코드를 사용할 수 있습니다.

val dialog = Dialog(context)
dialog.window?.decorView?.background = null

투명 배경으로 대화 상자를 만드는 코틀린 방법:

 Dialog(activity!!, R.style.LoadingIndicatorDialogStyle)
            .apply {
                // requestWindowFeature(Window.FEATURE_NO_TITLE)
                setCancelable(true)
                setContentView(R.layout.define_your_custom_view_id_here)

                //access your custom view buttons/editText like below.z
                val createBt = findViewById<TextView>(R.id.clipboard_create_project)
                val cancelBt = findViewById<TextView>(R.id.clipboard_cancel_project)
                val clipboard_et = findViewById<TextView>(R.id.clipboard_et)
                val manualOption =
                    findViewById<TextView>(R.id.clipboard_manual_add_project_option)

                //if you want to perform any operation on the button do like this

                createBt.setOnClickListener {
                    //handle your button click here
                    val enteredData = clipboard_et.text.toString()
                    if (enteredData.isEmpty()) {
                        Utils.toast("Enter project details")
                    } else {
                        navigateToAddProject(enteredData, true)
                        dismiss()
                    }
                }

                cancelBt.setOnClickListener {
                    dismiss()
                }
                manualOption.setOnClickListener {
                    navigateToAddProject("", false)
                    dismiss()
                }
                show()
            }

로드 작성style.xml의 IndicatorDialogStyle은 다음과 같습니다.

<style name="LoadingIndicatorDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <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:statusBarColor">@color/black_transperant</item>
    <item name="android:layout_gravity">center</item>
    <item name="android:background">@android:color/transparent</item>
    <!--<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>-->
</style>

언급URL : https://stackoverflow.com/questions/10795078/dialog-with-transparent-background-in-android

반응형