2016-12-10 12 views
0

私は時間のためにグーグルと数え切れないほどのものを試してみましたが、私はちょうどこれを動作させることはできませんしてきた...ステータスバー/ナビゲーションバーとマンティンステータスバーの色を重ならないでDialogFragmentを全画面にする方法は?

これはMyFragment.javaです:

public class MyFragment extends DialogFragment { 

    public MyFragment() { 
     // Required empty public constructor 
    } 

    public static MyFragment newInstance() { 
     MyFragment newFragment = new LoginDialogFragment(); 
     newFragment.setCancelable(false); 
     return newFragment; 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new Dialog(getActivity(), R.style.MyAppTheme_Dialog); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_my, container, false); 
     ButterKnife.bind(this, view); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     Window window = getDialog().getWindow(); 

     if (window != null) { 
      window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); 
      window.setWindowAnimations(R.style.MyAppTheme_Dialog); 
     } 
    } 

} 

そして、これがstyles.xmlです:

<style name="MyAppTheme" parent="PreferenceFixTheme.Light.NoActionBar"> 
    <item name="android:windowBackground">@color/background</item> 
    <item name="android:colorBackground">@color/background</item> 
    <item name="colorPrimary">@color/primary</item> 
    <item name="colorPrimaryDark">@color/primary_dark</item> 
    <item name="colorAccent">@color/accent</item> 
    <item name="preferenceCategory_marginBottom">0dp</item> 
</style> 

<style name="MyAppTheme.Dialog"> 
    <item name="android:backgroundDimEnabled">false</item> 
    <item name="android:windowBackground">@null</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
</style> 

これは私が期待しているようにほとんど機能します...唯一の問題は、window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);を呼び出すとステータスバーの色が黒に変わる画面全体(ステータス/ナビゲーションバーを除く)を埋めることです。ダイアログを閉じると、colorPrimaryDarkに戻ります。

window.setLayout(...)行を削除した場合、ステータスバーにはcolorPrimaryDarkが保持されますが、ダイアログのサイズはデフォルト(画面中央の小さな正方形)になります。私はwindow.setLayout(...)呼ん同じ場所で

が、私は次のコードを入れてみました:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    getWindow().setStatusBarColor(ContextCompat.getColor(getActivity, R.color.primary_dark)); 
} 

これはcolorPrimaryDarkにステータスバーの色を設定しますが、それは、ステータスとナビゲーションバーの両方が重なっています。

ステータスバーとナビゲーションバーを重ねずにステータスバーにcolorPrimaryDarkを保存するだけではフルスクリーン表示できません。

同じ問題で私が見つけたいくつかの質問がありましたが、私は動作するように提案を得ることができませんでした。どちらも受け入れ答えがありません:

+0

DialogFragmentである必要がありますか?アクティビティは機能しますか? – Karakuri

+0

あなたは上書きされたdialogfragmentで試してみましたか?私はコードを持っています。私はあなたのニーズを満たすかどうかはわかりません。どのような方法で私はコードを投稿します。それを試してみてください。 – Noorul

+1

ダイアログをダイアログではないように強制しようとしているのはなぜですか?あなたは間違った抽象を使用しているようです。 – ianhanniballake

答えて

1

チェックこのカスタマイズされたダイアログの断片を、あなたの必要性を満たすそれを試してみてください。私に知らせてください。

import android.content.pm.ActivityInfo; 
import android.content.res.Configuration; 
import android.graphics.Point; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.util.TypedValue; 
import android.view.Display; 

/** 
    * Created by Noorul on 02-07-16. 
*/ 

public class _DialogFragment extends DialogFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // preventScreenRotation(); 
    } 

    @Override 
    public void onDestroy() { 
    // releaseScreenRotation(); 
    super.onDestroy(); 
} 

@SuppressWarnings("deprecation") 
@Override 
public void onStart() { 
    super.onStart(); 

    // change dialog width 
    if (getDialog() != null) { 

     int fullWidth = getDialog().getWindow().getAttributes().width; 
     int fullHeight = getDialog().getWindow().getAttributes().height; 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
      Display display = getActivity().getWindowManager().getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 

      fullWidth = size.x; 
      fullHeight = size.y; 
     } else { 
      Display display = getActivity().getWindowManager().getDefaultDisplay(); 
      fullWidth = display.getWidth(); 
      fullHeight = display.getHeight(); 
     } 

     final int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources() 
       .getDisplayMetrics()); 

     int w = fullWidth - padding; 
     int h = fullHeight - (padding * 2); 

     getDialog().getWindow().setLayout(w, h); 
    } 
} 


private void preventScreenRotation() { 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
       getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } else { 
     getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
    } 

    private void releaseScreenRotation() { 
     getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
} 

変更するダイアログのサイズは、必要に応じて異なります。

+0

それはほとんど働いた...私は私の質問に1つの詳細を言及するのを忘れていた。私は、このフラグメントとこのコードの上からスライドをアニメーション(下から上へ)を持っています。フラグメントは正確にどのようにサイズされ、ステータスバーは色を維持します。問題は、フラグメントが下にあるナビゲーションバーの上に表示されている間だけです... :( –

+0

私はスクリーンショットを私に共有できますか? – Noorul

+0

実際のスクリーンショットはまだリリースされていませんが、まだリリースされていませんが、これに似ています:https://i.stack.imgur.com/cppoj.png - 「コメントを書く」ビットがナビゲーションバーのボタンとどのように重なっているのかを確認します。スライドアニメーション中に何が起こるのですか? (正しいステータスバーの色で)このようにしてください:https://i.stack.imgur.com/HiSv9.png - 私は何をしたいですか? –

0

マテリアルデザインガイドラインに従ってフルスクリーンダイアログを作成するには: DialogFragmentにこのコードを入れてください:

ベースレイアウトで24dpする上マージンを設定し
getSupportFragmentManager().beginTransaction().add(android.R.id.content, FullScreenDialog.newInstance()).addToBackStack(null).commit(); 

:によって

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

を呼び出し、このダイアログ。ダイアログがステータスバーに重ならないようにします。

関連する問題