20

MATCH_PARENT の幅で DialogFragment を作成しようとしているので、ダイアログはほぼ全画面表示になります (フローティングの外観のために端の周りにパディングを残します)。Android でこのソリューションFull Screen 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);
4

10 に答える 10

37

これは私にぴったりです。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;
}
于 2014-03-26T18:19:34.640 に答える
21

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

于 2012-08-09T16:56:19.653 に答える
8
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE,android.R.style.Theme_Holo_Light);
}
于 2015-06-22T12:20:07.460 に答える
3

この回答 は、DialogFragmentの幅と高さを設定する方法を教えてくれますか?

int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));
于 2013-11-01T13:56:58.197 に答える
2

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

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

これによりフルスクリーンになりますが、通知バーを保持するためにフルスクリーン スタイルを使用していません。

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

于 2016-04-16T22:43:19.437 に答える
2

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

于 2013-06-12T14:32:00.850 に答える
1

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

@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 で色分けされたステータス バーを確認することもできます。

于 2016-10-14T06:24:43.407 に答える
-1

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

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

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

//don't show dialog like this
newFragment.show(fragmentManager, "dialog");
于 2016-09-08T07:53:20.010 に答える