web-dev-qa-db-ja.com

DialogFragmentの周りの背景色を変更する方法は?

カスタムDialogFragmentを作成しています。ダイアログのレイアウトはmy_dialog.xmlに設定されていますが、ダイアログの周囲の色(透明な灰色)を変更するにはどうすればよいですか?

enter image description here

my_dialog.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center" >

    <TextView
        Android:id="@+id/hello"
        Android:layout_width="100dp"
        Android:layout_height="100dp"
        Android:background="@Android:color/holo_orange_light"
        Android:gravity="center"
        Android:text="hello" />

</RelativeLayout>

MyDialogFragment.Java

public class MyDialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.my_dialog, container);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        return view;
    }
}
39
jul

ダイアログスタイルでAndroid:windowIsFloatingをfalseに、Android:windowBackgroundをカスタムカラーに設定する必要がありました。

styles.xml

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <style name="MyDialog" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowFrame">@null</item>
        <item name="Android:windowBackground">@color/orange_transparent</item>
        <item name="Android:windowIsFloating">false</item>
        <item name="Android:windowContentOverlay">@null</item>
        <item name="Android:windowTitleStyle">@null</item>
        <item name="Android:colorBackgroundCacheHint">@null</item>
        <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
        <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="Android:gravity">center</item>
    </style>

</resources>

MyDialogFragment

public class MyDialogFragment extends DialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialog);
    }
}
50
jul

私はDialogFragmentの透明な背景が欲しかったのですが、コードではこれはうまくいきます:

_@Override
public void onStart() {
    super.onStart();

    Window window = getDialog().getWindow();
    window.setBackgroundDrawableResource(Android.R.color.transparent);
}
_

もちろん、setBackgroundDrawable()またはsetBackgroundDrawableResource()を使用して、任意の色またはDrawableを指定できます。

これは少なくともonStart()では機能しますが、onCreate()では機能せず、必ずしもonCreateView()と思われる

とはいえ、ほとんどの場合、次の行に沿って XMLでスタイルを使用して を実行する方がおそらくきれいです。

_<style name="MyDialogStyle" parent="@Android:style/Theme.Holo.Light.Dialog">
    <item name="Android:windowBackground">@Android:color/transparent</item>
</style>
_
26
Jonik

完全に透明なダイアログを取得するには、onCreateViewで以下を設定できます。

  • setBackgroundDrawableからColor.TRANSPARENT
  • setDimAmountから0

こちらのコード例をご覧ください:

public class TextEditor extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_text_editor, container);

        // make dialog itself transparent
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        // remove background dim 
        getDialog().getWindow().setDimAmount(0);

        //[add more custom code here...]

        return view;
    }
}
17
Dirk

私はこれをするだけでいいことがわかりました:

<style name="MyDialog" parent="@Android:style/Theme.Dialog">
    <!--  other attributes  -->
    <item name="Android:backgroundDimEnabled">false</item>
</style>
14
Blundell

OnCreateをオーバーライドし、そこでスタイルを設定すると動作するはずです。

@Override
public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);
    setStyle(DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent);
}
2
amafernandes

'onCreateDialog'ではなく 'onCreateView'でAlertDialog Builderを使用している人は、次のコードのようにテーマを割り当てることができます。テーマの完全なセットは R.style から見つけることができます。それらの一部は最近サポートされ、古いデバイスの電話では利用できないことを忘れないでください。

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
        builder.setView(view);

        return builder.create();
    }
2
Hesam

7月の答えは私にとってほとんど良いものでした。しかし、AlertDialog.Builderを使用すると機能しないようです。

ここでスタイルを設定する必要がありました。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );
1
Ignacio Roda

BackgroundのText XMLを変更します

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >

<TextView
    Android:id="@+id/hello"
    Android:layout_width="100dp"
    Android:layout_height="100dp"
    Android:gravity="center"
    Android:text="hello" />

TextViewの高さと幅を100dpに指定したためです。ダイアログ全体を埋める背景を設定します。メインレイアウトはwrap_contentであるため。それがあなたを助けたなら、答えを受け入れてください。
編集:backgroundを変更するには、レイアウトまたはテキストビューに追加しますAndroid:background="#232323"これらの番号を好きな色に変更できます。または、drawableから背景を設定できますAndroid:background="@drawable/yourpicturename"

0
k0sh