我有一个EditText输入对话框.当我单击对话框上的"是"按钮时,它将验证输入,然后关闭对话框.但是,如果输入错误,我想保持在同一个对话框中.每次无论输入是什么,当我点击"否"按钮时,对话框应自动关闭.我怎么能禁用它?顺便说一句,我已经使用PositiveButton和NegativeButton作为对话框上的按钮.
android dialog android-alertdialog android-dialog android-dialogfragment
我正在创建一个DialogFragment来显示有关我的应用程序的一些帮助消息.一切工作正常,除了一两件事:有一个在,显示DialogFragment窗口顶部的黑色条纹,那我相信是留给冠军,这是我不想用.
这是特别痛苦的,因为我的自定义DialogFragment使用白色背景,所以这种变化太臭名昭着,不能放在一边.
让我以更加图形化的方式向您展示:

现在我的DialogFragment的XML代码如下:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/holding"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/dialog_fragment_bg"
>
<!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados -->
<LinearLayout
android:id="@+id/confirmationToast"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView android:id="@+id/confirmationToastText"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="@string/help_dialog_fragment"
android:textColor="#AE0000"
android:gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/confirmationButtonLL"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<Button android:id="@+id/confirmationDialogButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="60dp"
android:background="@drawable/ok_button">
</Button>
</LinearLayout>
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
以及实现DialogFragment的类的代码:
public class HelpDialog extends DialogFragment {
public HelpDialog() {
// Empty constructor required for DialogFragment
} …Run Code Online (Sandbox Code Playgroud) 我想创建一个自定义对话框,如下所示

我尝试过以下的事情.
我创建了AlertDialog.Builder的子类,并使用了自定义标题和自定义内容视图并使用了它,但结果并不像预期的那样.
另一种尝试是继承DialogFragment并在onCreateDialog中自定义对话框,但结果不是预期的.
然后我尝试使用普通的Dialog类.结果并不像预期的那样.
在所有三种情况下,问题是当我忽略标题视图时,对话框的大小不是预期的,当我使用标题视图时,结果是内容视图周围有一个粗边框(实际上看起来很糟糕).现在我脑子里有两个问题......
我怎样才能做到这一点?由于我已经尝试了很多东西,因此我们将更加赞赏直接的答案.
在Android应用程序中显示错误或警告对话框的最佳方法是什么?
编辑 Android开发人员文档建议我们应该使用DialogFragments或Dialogs向用户显示错误/警报消息.但有一次他们说......
提示:如果需要自定义对话框,则可以将"活动"显示为对话框,而不是使用"对话框API".只需创建一个活动,并将其主题设置为清单元素中的Theme.Holo.Dialog.
那是什么意思?使用Activity只是为了显示错误消息是不是太多了?
谷歌建议我们使用DialogFragment而不是简单Dialog的使用Fragments API,但使用隔离DialogFragment的简单的是 - 否确认消息框是荒谬的.在这种情况下,最佳做法是什么?
android android-fragments android-dialog android-dialogfragment
这应该是一个简单的任务,但由于某种原因,我可以找到一种方法来设置DialogFragment的标题.(我正在使用onCreateView重载设置对话框内容).
默认样式为标题留下了一个位置,但我找不到DialogFragment类的任何方法来设置它.
当该onCreateDialog方法用于设置内容时,标题以某种方式神奇地设置,所以我想知道这是否是设计,或者在使用onCreateView重载时有一个特殊的技巧来设置它.
我指定我DialogFragment的布局在XML布局文件(让我们称之为layout_mydialogfragment.xml),它layout_width和layout_height属性,特别是(为100dp每个假设).然后我在DialogFragment的onCreateView(...)方法中扩充这个布局,如下所示:
View view = inflater.inflate(R.layout.layout_mydialogfragment, container, false);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我发现当我的对话框(DialogFragment)出现时,它不尊重layout_width和layout_height在其xml布局文件中指定(并且我的对话框根据内容收缩或扩展可变).任何人都知道我是否或如何让我的对话框尊重layout_width和layout_height在其xml布局文件中指定?目前我必须在DialogFragment的onResume()方法中再次指定对话框的宽度和高度,如下所示......
getDialog().getWindow().setLayout(width, height);
Run Code Online (Sandbox Code Playgroud)
...因此,不可取的是,必须记住在两个地方对对话框的宽度和高度进行任何改进.
android android-fragments android-dialog android-dialogfragment
问题:如何创建从DialogFragment到另一个Fragment的回调.就我而言,涉及的活动应该完全不知道DialogFragment.
考虑一下我
public class MyFragment extends Fragment implements OnClickListener
Run Code Online (Sandbox Code Playgroud)
然后在某些时候我能做到
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Run Code Online (Sandbox Code Playgroud)
MyDialogFragment的样子
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果DialogFragment在其生命周期中暂停和恢复,则无法保证听众会出现.片段中唯一的保证是通过setArguments和getArguments通过Bundle传递的.
如果它应该是监听器,有一种方法可以引用该活动:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Run Code Online (Sandbox Code Playgroud)
但我不希望活动监听事件,我需要一个片段.实际上,它可以是任何实现OnClickListener的Java对象.
考虑通过DialogFragment呈现AlertDialog的Fragment的具体示例.它有Yes/No按钮.如何将这些按钮发送回创建它的Fragment?
我正在尝试显示几乎全屏的DialogFragment.但我不知道怎么做不到.
我展示Fragment的方式直接来自android开发者文档
FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");
Run Code Online (Sandbox Code Playgroud)
我知道天真地尝试将片段中的RelativeLayout设置为fill_parent和一些minWidth和minHeight.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="1000px"
android:minHeight="600px"
android:background="#ff0000">
Run Code Online (Sandbox Code Playgroud)
我知道期望DialogFragment填满屏幕的大部分.但我似乎只是垂直调整大小,但只是水平固定宽度.
我还尝试在代码中设置窗口属性,如下所示:http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec.但这也没有帮助.
我可能误解了Android处理Dialogs的方式,因为我对它不熟悉.我怎么能这样做?有没有其他方法可以实现我的目标?
Android设备:
华硕EeePad Transformer
Android 3.0.1
更新: 我现在设法将其全屏显示,片段中包含以下代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是我想要的.我肯定需要在对话框周围显示一个小"填充"来显示背景.
任何想法如何实现?
我有一些需要显示常规对话框的片段.在这些对话框中,用户可以选择是/否答案,然后片段应该相应地运行.
现在,Fragment该类没有onCreateDialog()覆盖的方法,所以我想我必须在包含的外部实现对话框Activity.没关系,但是Activity需要以某种方式向片段报告所选择的答案.我当然可以在这里使用回调模式,因此片段在Activity一个监听器类中注册自己,而Activity会通过它报告回答,或类似的东西.
但对于一个简单的任务来说,这似乎是一个相当大的混乱,因为在一个片段中显示一个"简单的"是 - 否对话框.而且,这样我的Fragment自足也会减少.
有没有更清洁的方法来做到这一点?
编辑:
这个问题的答案并没有真正详细解释如何使用DialogFragments来显示Fragments中的对话框.所以AFAIK,走的路是:
.setTargetFragment().我需要传递一些变量DialogFragment,所以我可以执行一个动作.Eclipse建议我应该使用
Fragment#setArguments(Bundle)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用这个功能.如何使用它将变量传递给对话框?