2016-12-10 4 views
0

나는 시간 동안 인터넷 검색과 셀 수없이 많은 일들을 시도했지만 난 그냥이 동작하지 않습니다 ...상태 표시 줄/탐색 모음과 mantain 상태 표시 줄 색상이 겹치지 않으면 서 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이 유지되지만 대화 상자 크기가 기본값 (화면 중간의 작은 사각형)이됩니다.

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에 상태 표시 줄의 색상을 설정하지만이 상태 및 탐색 모음을 모두 겹치는 : 나는 window.setLayout(...) 전화 같은 장소에서

, 나는 다음과 같은 코드를 넣어했습니다.

상태 표시 줄과 탐색 모음을 겹치지 않고 전체 화면을 가져올 수 없으며 상태 표시 줄에 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

거의 효과가있었습니다 ... 내 질문에 대해 하나의 세부 사항을 언급하는 것을 잊어 버렸습니다. 이 조각에 애니메이션을 아래에서 위로 이동하여 슬라이드를 만들었습니다.이 코드는 조각의 크기가 정확히 어떻게 될지 예상하고 상태 표시 줄에서 색상을 유지합니다. 문제는 조각이 아래로 이동하는 동안 하단 탐색 모음 맨 위에 있다는 것입니다. ... ( –

+0

내 스크린 샷을 공유 할 수 있습니까? – Noorul

+0

실제 스크린 샷을 볼 수는 없지만 아직 출시되지는 않았습니다. 이것과 비슷한 : https://i.stack.imgur.com/cppoj.png - "코멘트 쓰기"비트가 탐색 막대 버튼과 어떻게 겹쳐져 있는지 보시겠습니까? 슬라이드 애니메이션이 진행되는 동안 그 일이 일어납니다. (올바른 상태 표시 줄 색으로) : https://i.stack.imgur.com/HiSv9.png - 원하는 것은 무엇입니까? –

0

머티리얼 디자인 지침에 따라 전체 화면 대화 상자를 만들려면 DialogFragment에이 코드를 넣어 :

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

콜이 대화 상자를 기준 : 기본 레이아웃에 24dp하는 위쪽 여백을 설정

getSupportFragmentManager().beginTransaction().add(android.R.id.content, FullScreenDialog.newInstance()).addToBackStack(null).commit(); 

. 대화 상자가 상태 표시 줄과 겹치지 않도록하십시오.