web-dev-qa-db-ja.com

全画面DialogFragment

幅がMATCH_PARENTのDialogFragmentを作成して、ダイアログがほぼ全画面になるようにします(フローティングルックのエッジの周囲にパディングを残します)。私はこの解決策を見ました AndroidのフルスクリーンDialogFragment ですが、幅を1000dpに設定するハックを回避しようとしています。現在のレイアウトでは、FILL_PARENTとMATCH_PARENTのどちらを使用していても、幅と高さをWRAP_CONTENTに設定しているようです。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

私はダイアログ(DialogFragmentではなく)にこのソリューションを使用しており、期待どおりに機能します。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
20
invertigo

これは私にぴったりです。 when extends DialogFragment override onCreateView()...すべてのロジックを強制します

ダイアログは、このメソッドをオーバーライドするだけで全画面表示にします

 @Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}
37
Attif

linearLayoutの代わりにRelativeLayoutに切り替えてみてください。私の場合はうまくいきました

21
atermenji
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE,Android.R.style.Theme_Holo_Light);
}
8
evya

この答えは私を助けます DialogFragmentの幅と高さを設定する方法?

int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));
3
Danylo.Vus

私が見つけた最良の解決策は、widthまたはminWidthを任意の大きな値に設定して、画面全体に表示されるようにすることでした。この解決策は好きではありませんが、他にこれ以上見たことがありません。

2
invertigo

私はこの質問に回答しましたが、これは最も短く効率的な方法です。確認してください このスレッド内

お役に立てれば :)

1
Biswajit

私のコードでは、フルスクリーンダイアログが必要でしたが、それでも画面の上部に通知バーを表示するため、以下を使用しています。

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

これでフルスクリーンになりますが、フルスクリーンスタイルを使用していないので、通知バーを維持しています。

それが誰かを助けることを願っています!

1
LukeWaggoner

次のようなこともできます

@Override
  public void onCreate(@Nullable final Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_Material_Light_NoActionBar_Fullscreen);
    } else {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_DeviceDefault_Light_NoActionBar);
    }
    super.onCreate(savedInstanceState);

  }

これにより、バージョン> = Lollipopの色付きのステータスバーを表示することもできます。

1
Vaibhav Sharma

全画面ダイアログを表示するには、次を使用する必要があります

public class CustomDialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout to use as dialog or embedded fragment
        return inflater.inflate(R.layout.purchase_items, container, false);
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }
}

そして、このダイアログを表示するには:

CustomDialogFragment newFragment = new CustomDialogFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
fragmentManager.beginTransaction().add(Android.R.id.content, newFragment).commit();

[〜#〜] attention [〜#〜]:次のコードを使用してダイアログを表示することはできません。そうでない場合、ダイアログは全画面ではなく画面の中央に表示されます。

//don't show dialog like this
newFragment.show(fragmentManager, "dialog");
0
loic

DialogFragmentで次の作業を行います。 onCreateView()に以下を追加

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //…
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    //…
    return view;
}
0
Sattar Hummatli