2017-09-02 50 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作为第二个参数时显示错误 –