2017-09-02 76 views
1

我試圖做一個對話片段,以適應屏幕尺寸的屏幕,但問題是,我得到這個結果:正如你所看到的對話框不MainActivity DialogScreenShot全屏DialogFragment不適合

適合在活動中,我已經嘗試了很多東西,沒有任何運氣。 這就是我呼籲對話的方式:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      FragmentManager fragmentManager = getSupportFragmentManager(); 
      EventDialog newFragment = new EventDialog(); 
      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      transaction.add(android.R.id.content, newFragment).addToBackStack(null).commit(); 
     } 
    }); 

,這是對話的片段類:

public class EventDialog extends DialogFragment { 

public static final String TAG = "Event"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.event_dialog_layout, container, false); 
    Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 
    toolbar.setTitle("New Event"); 

    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 

    ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); 
    } 
    setHasOptionsMenu(true); 
    return rootView; 
} 

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

    return dialog; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); 
    inflater.inflate(R.menu.event_dialog_menu, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_save) { 
     // handle confirmation button click here 
     return true; 
    } else if (id == android.R.id.home) { 
     // handle close button click here 
     dismiss(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

這是佈局的xml文件:

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay" 
    android:fitsSystemWindows="false"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/AppTheme.AppBarOverlay" /> 

</android.support.design.widget.AppBarLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Your content here" /> 

</LinearLayout> 

你有什麼想法爲什麼會發生這種情況?

我的目標是製作全屏幕材質設計對話框

謝謝!

回答

0

在的onResume()在你的Eventdialog類,你可以這樣設置高度和片段的寬度 -

public void onResume() { 

     super.onResume(); 
     WindowManager.LayoutParams params = getDialog().getWindow().getAttributes(); 
     params.width = RelativeLayout.LayoutParams.MATCH_PARENT; 
     params.height = RelativeLayout.LayoutParams.MATCH_PARENT; 
     params.gravity = Gravity.CENTER; 
     getDialog().getWindow().setAttributes(params); 



    } 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.event_dialog_layout, container, false); 
    Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 
    toolbar.setTitle("New Event"); 

    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 

    ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); 
    } 
    setHasOptionsMenu(true); 
    return rootView; 
} 
+0

添加時在恢復功能我的應用程序崩潰,我試圖把它也在創建,但它沒有工作,仍然感謝:) –

+0

什麼是錯誤...你可以看到它通過點擊底部的Android監視器的androidstudio。記住這是被覆蓋的功能..我已經更新了我的答案...供參考 –

+0

它說:'試圖調用虛擬方法'android.view.Window android.app.Dialog.getWindow()'對空引用' , 這就是爲什麼我試圖把它放在onCreateDialog中,但它不適用於我 –

0

做你試圖把風格到您的對話框片段

EventDialog dialog = new EventDialog(); 
dialog.setStyle(DialogFragment.STYLE_NO_FRAME, DialogFragment.STYLE_NO_TITLE); 
dialog.show(getFragmentManager(), EventDialog.class.getName()); 
+0

它使對話框看起來很舊,並且通常在嘗試將DialogFragment.STYLE_NO_TITLE作爲第二個參數時顯示錯誤 –