web-dev-qa-db-ja.com

全画面ダイアログをダイアログフラグメントで設定する方法

ダイアログフラグメントを使用してフルスクリーンダイアログを作成しています。ダイアログは正常に表示されましたが、幅と高さに問題があります。全画面サイズは表示できません。アクティビティのように幅と高さを設定して、フルスクリーンサイズを累積します。親切に、ダイアログの幅と高さを設定して、フルスクリーンサイズに設定する方法を教えてください。

CustomeDialogFramgnet:

public class CustomDialogFragment extends DialogFragment {
    /** The system calls this to get the DialogFragment's layout, regardless
     of whether it's being displayed as a dialog or an embedded fragment. */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout to use as dialog or embedded fragment
        View rootView = inflater.inflate(R.layout.item_fragment, null, false);

        Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
        toolbar.setTitle("Dialog title");

        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeAsUpIndicator(Android.R.drawable.ic_menu_close_clear_cancel);
        }

        return rootView;
    }

    /** The system calls this only when creating the layout in a dialog. */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        getActivity().getMenuInflater().inflate(R.menu.alert_dialog_input, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_save) {
            // handle confirmation button click here
            return true;
        } else if (id == Android.R.id.home) {
            // handle close button click here
            dismiss();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

item_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </Android.support.design.widget.AppBarLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:id="@+id/listView"
            Android:text="zohaib">
        </TextView>

    </LinearLayout>

</Android.support.design.widget.CoordinatorLayout>
8
Zohaib Siddique

以下のようなstyle.xmlから拡張するTheme.AppCompat.Light.DarkActionBarthemeを作成します。

<style name="DialogFragmentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="Android:paddingRight">0dp</item>
    <item name="Android:paddingLeft">0dp</item>
    <item name="Android:layout_width">match_parent</item>
    <item name="Android:windowNoTitle">true</item>
</style>

styleを開いているときに作成したdialogを次のように設定します。

CustomDialogFragment mDialog = new CustomDialogFragment();
...
mDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogFragmentTheme);
mDialog.show(getSupportFragmentManager(), "DialogFragment");
16
himanshu1496

ダイアログの作成後にこの行を設定します。

dialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

カスタムDialogFragmentを作成する場合は、onCreateDialogFragmentにこれを書き込みます。

setStyle(DialogFragment.STYLE_NORMAL,Android.R.style.Theme_Black_NoTitleBar_Fullscreen);

参照

3
Ravi Rupareliya

このようなテーマを作成し、ダイアログに追加します

<style name="ThemeDialog" parent="Android:Theme.Holo.Dialog">
    <item name="Android:windowMinWidthMajor">100%</item>
    <item name="Android:windowMinWidthMinor">100%</item>
</style>

ダイアログ作成後にこの行を設定

getDialog().getWindow()
            .getAttributes().windowAnimations = R.style.ThemeDialog;
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
    wmlp.gravity = Gravity.FILL_HORIZONTAL;
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));
    getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
2
Mohit Suthar

この行を、レイアウトを拡張するonCreateに追加します。

getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
0
Hamza Khan

あなたのstyle.xmlで以下のテーマを作成してください:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:paddingRight">0dp</item>
    <item name="Android:paddingLeft">0dp</item>
    <item name="Android:layout_width">match_parent</item>
    <item name="Android:windowNoTitle">true</item>
</style>

次に、DialogFragmentでスタイルを設定します

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}
0
Zahra.HY