Articles of android dialogfragment

getLocationOnScreen在旋转后返回旧位置

我拥有的: android:configChanges=”orientation|screenSize|keyboardHidden” 一个DialogFragment就可以了 DialogFragment上的ViewA 有什么问题: 我正在使用ViewA.getLocationOnScreen来获取视图屏幕上的位置。 当我第一次打开对话框时,位置是正确的。 旋转屏幕后,由于android:configChanges视图以某种方式不更新它的位置,即使对话框在活动中正确居中,ViewA的getLocationOnScreen指向旋转前的旧位置。 我试过的。 我覆盖了对话框的onConfigurationChanged并尝试了这个: ViewA.requestLayout (什么都不做) ViewA.getViewTreeObserver().addOnGlobalLayoutListener并在onGlobalLayout上将topMargin设置为1并再次调用requestLayout。 (这个工作但我不想在每次旋转屏幕时设置边距) 我想知道的是如何强制重新定位对话框,使得getLocationOnScreen在旋转后返回正确的值 请注意,我不想更改android:configChanges

使用Robolectric测试DialogFragments

我有几个关于使用Robolectric测试DialogFragment类的问题,因为我在Internet上遇到了关于这个主题的完全缺乏的信息。 传递给onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)的正确参数是什么? 我无法将parameter passing给DialogFragment ,我使用以下方法: activity = new Activity(); dialog = new DialogFragment(); Bundle bundle = new Bundle(); dialog.setArguments(bundle); FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(dialog, “fragment”); ft.commit(); 每当代码尝试访问参数时,它都会以NullPointerException崩溃。 将高度赞赏有关这些主题的任何想法。

DialogFragment不会使用SOFT_INPUT_ADJUST_PAN进行平移

我有一个dialogfragment,里面有一些内容,包括EditText字段。 不幸的是,当我单击EditText字段时,软键盘会覆盖对话框的“关闭”按钮。 这是我通过使用解决的问题 getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 不幸的是,当我这样做时,对话框会缩小,其中的其他项目也会被覆盖。 我尝试使用SOFT_INPUT_ADJUST_PAN ,但在这种情况下只调整了包含的活动,对话碎片本身没有移动,并且仍然覆盖了关闭按钮。 我有什么方法可以制作对话片段吗? 我的相关dialogfragment代码如下所示: @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); mContactSupportView.findViewById(R.id.compose_message).clearFocus(); }

DialogFrag#show()来自片段抛出“IllegalStateException:onSaveInstanceState后无法执行此操作”

为了清楚起见,我已经阅读了关于“IllegalStateException:在onSaveInstanceState之后无法执行此操作”的十几个SO问题,我已经阅读了Alex Lockwood的博客文章http://www.androiddesignpatterns.com/2013/08/片段事务提交状态-loss.html 所以我不是盲目地问这个。 我有一个非常简单的用例案例, 不涉及AsyncTask或任何后台处理。 我有一个包含按钮的片段。 在按钮的onClickListener上,我创建了一个DialogFragment并显示它。 public final class OverviewFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.overview_fragment, container, false); startNewGameButton = (Button) view.findViewById(R.id.buttonNewGame); startNewGameButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final NewGameFragment dialogFrag = NewGameFragment.create(getApplication()); dialogFrag.show(getFragmentManager(), NewGameFragment.FRAGMENT_TAG); } }); } [NewGameFragment] […]

具有半透明StatusBar的全屏DialogFragment

我有一个DialogFragment,我想全屏显示。 但我仍然想要一个StatusBar,以及底部的硬件按钮。 我还想设置StatusBar的背景颜色(对于Lollipop)。 我的问题是,如果我在DialogFragment中设置以下标志: getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); StatusBar和Hardware键盘都变为半透明,DialogFragment在这些后面延伸。 这是代码,它已经大大减少,变得可读: public class CardDetailsDialog extends DialogFragment { Setup parameters… public static CardDetailsDialog newInstance(final long cardId, final long projectId){ CardDetailsDialog frag = new CardDetailsDialog(); frag.setStyle(DialogFragment.STYLE_NORMAL, R.style.CardDetailsDialogStyle); return frag; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if(getDialog() != null) { getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogSlideAnimation; getDialog().getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); getDialog().getWindow().setStatusBarColor(Color.RED); } […]

DialogFragment上的commitAllowingStateLoss

我在显示DialogFragment IllegalStateException : java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 我知道它为什么会发生但我想通过重写DialogFragment show函数来显示对话框的commitAllowingStateLoss: public void show(FragmentManager manager, String tag) { mDismissed = false; mShownByMe = true; FragmentTransaction ft = manager.beginTransaction(); ft.add(this, tag); ft.commit(); //replace it by commitAllowingStateLoss } 但是我没有访问mDismissed和mShownByMevariables,我如何访问这些variables来修改它们,就像它的父级一样。

对话框片段顶部的布局边距/填充

当使用片段时,我的布局会受到顶部额外空间的干扰,我不知道它来自何处。 它看起来像这样: 这个空地的可能来源是什么? 我还没有find主题或一些风格设置,或者这个空间是否留给了动作栏? 我真的想摆脱这个。 以下是相应的布局xml和实例化对话框的代码: XML: Java的: FragmentManager fm = this.getSupportFragmentManager(); mSearchingDialog = new SearchingDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(“name”, mCityToAdd.userName()); mSearchingDialog.setArguments(bundle); mSearchingDialog.show(fm, TAG); 我也在这里问过这个问题,认为这是一个与滚动视图相关的问题,但空间出现在我的所有片段中: ScrollView在顶部添加了额外的空间

在DialogFragment中显示ConstraintLayout

我希望你能解决我的问题。 我试图谷歌它,并在这里查看主题,但无法find答案。 我最近将我的布局更改为ConstraintLayouts ,到目前为止,这一切都很顺利。 然而我的问题是我有一些显示LinearLayout DialogFragments ,当我将其更改为ConstraintLayout我只显示一个褪色的叠加层,但不显示布局中的元素。 如果我将宽度和高度硬编码为100dp ,它将显示该区域。 当我尝试match_parent或任何其他组合时,同样的问题适用。 我也尝试将高度和宽度设置为设备的高度和宽度,但仍然没有运气。 在我的CreateWeddingMetadataFragment中的onCreateView中,我有: createButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, “Show message dialog”); FragmentManager fm = getFragmentManager(); CreateWeddingMetadataDialogFragment welcomeMessageDialog = new CreateWeddingMetadataDialogFragment(); welcomeMessageDialog.show(fm, “metadate_fragment_dialog”); welcomeMessageDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { } }); 在我的CreateWeddingMetadataFragmentDialog中,我有: public class CreateWeddingMetadataDialogFragment extends DialogFragment{ private static […]

键盘显示时,DialogFragment不会resize

我正在尝试使用SherlockDialogFragment来询问用户的一些输入。 我的手机上的一切正常(Galaxy Nexus,4.2),但是在较小的手机(模拟器2.3.3)上,当键盘出现时,它覆盖了DialogFragment的两个按钮,如下所示: 我的布局在ScrollView中,我在我的onViewCreated SOFT_INPUT_ADJUST_RESIZE更改为onViewCreated 。 我也尝试过SOFT_INPUT_ADJUST_PAN ,但它没有用 MyCustomDialog.java public class AddTaskDialog extends SherlockDialogFragment implements OnDateSetListener{ //… @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); } public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); this.inflater = getActivity().getLayoutInflater(); View mainView =inflater.inflate(R.layout.custom_dialog, null); […]

使用CollapsingToolbarLayout的CoordinatorLayout在Dialog片段中使用Keyboard打破

我最近决定将我的应用程序移动到使用新的支持设计库,最近发现了一个非常讨厌的错误。 假设我有一个主持AppBarLayout和任何可滚动视图的CoordinatorLayout,无论是ViewPager,NestedScrollView,还是具有所需滚动行为的RecyclerView; 选择显示一个显示键盘的对话框片段会导致AppBarLayout与滚动视图断开连接,并且它们不再滚动在一起。 此外,滚动视图被强制调整到底部屏幕的一半,而AppBar布局占据了上半部分,尽管它不需要它。 这个bug的video在这里: Youtube Link 编辑: 将Activity中键盘的softInputMode设置为“adjustPan”可以解决问题。 显然,CoordinatorLayout不喜欢通过键盘动态resize。 违规的XML看起来像这样,但我有多个XML变体表现出这种行为,其中的共同元素都是他们使用的是CollapsingToolbarLayout: