幅が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);
これは私にぴったりです。 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;
}
linearLayoutの代わりにRelativeLayoutに切り替えてみてください。私の場合はうまくいきました
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE,Android.R.style.Theme_Holo_Light);
}
この答えは私を助けます DialogFragmentの幅と高さを設定する方法?
int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));
私が見つけた最良の解決策は、widthまたはminWidthを任意の大きな値に設定して、画面全体に表示されるようにすることでした。この解決策は好きではありませんが、他にこれ以上見たことがありません。
私はこの質問に回答しましたが、これは最も短く効率的な方法です。確認してください このスレッド内
お役に立てれば :)
私のコードでは、フルスクリーンダイアログが必要でしたが、それでも画面の上部に通知バーを表示するため、以下を使用しています。
setStyle(DialogFragment.STYLE_NORMAL, Android.R.style.Theme_Black_NoTitleBar);
これでフルスクリーンになりますが、フルスクリーンスタイルを使用していないので、通知バーを維持しています。
それが誰かを助けることを願っています!
次のようなこともできます
@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の色付きのステータスバーを表示することもできます。
全画面ダイアログを表示するには、次を使用する必要があります
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");
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;
}