我创建了一个名为MyCustomDialogextends 的自定义对话框Dialog.我创建并显示我的自定义对话框,如下所示:
new MyCustomDialog(myContext).show();
Run Code Online (Sandbox Code Playgroud)
我重写了Dialog.onCreate(Bundle savedInstanceState)我的初始化方法.我也检查这个方法是否存在某个条件,如果没有,我想解除/取消我的对话.我已经打过电话了cancel(),并dismiss()在我的对话框的方式onCreate(Bundle savedInstanceState)与onStart()方法,但它没有任何效果.
任何人都知道如何在显示之前取消或关闭对话框(在对话框内)?
我试图改变AlertDialog.Builder的按钮颜色,但我没有找到一种方法来做到这一点.
我希望将按钮的颜色和标题更改为白色,就像在HOLO主题中一样.
请参阅以下2个屏幕截图作为示例:


我看过这里:
所有这些都不适合我.
这是我的代码:
public void logInDialog()
{
ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.dialogStyle);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
builder.setTitle("Log in");
View prefView = View.inflate(this, R.layout.log_in, null);
//The rest of the code.........
}
Run Code Online (Sandbox Code Playgroud)
这是我的样式代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="dialogStyle" parent="android:Theme.Dialog">
<item name="android:background">@color/white</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:button">@color/white</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud) 在方向更改时,将重新创建活动并重新创建日期时间对话框.我想保存用户已更改的日期时间对话框的状态.
在我关闭对话框之前,我想保留日期时间对话框的状态.
注意,我可以在onSaveInstanceState中关闭对话框,我可以在其中使用该包.但是,当活动进入暂停状态时也会调用它,在这种情况下,我不想忽略该对话框.因此,决定在onDestroy方法上解除它,但我没有bundle对象.这就是我面临这个问题的原因.有没有办法在onDestroy中访问捆绑包?或者对我的问题的任何其他建议将不胜感激.
@Override
protected void onDestroy() {
if(dateTimeDialog !=null && dateTimeDialog.isShowing())
{
//<HERE I WANT THE STATE TO BE SAVED IN THE BUNDLE>
dateTimeDialog.dismiss();
}
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果用户离开我们的应用程序,我们会锁定应用程序,并在解锁屏幕时恢复正在查看的对话框.如果我们在onSavedInstanceState上解除对话框,在解锁应用程序之后它会调用onRestart,start和resume方法,其中没有一个方法提供Bundle实例作为参数.
此外,我们有横向和纵向的单独布局,因此我们无法在清单文件中设置configChanges ="orientation".
android android-datepicker android-dialog android-activity android-dialogfragment
我模仿我认为相当标准的Dialog代码:
public class DChooseSeparator extends DialogFragment
{
// ...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder
.setTitle("My Title")
.setView(myDialogLayout)
.setPositiveButton(getString(R.string.sOKButton), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if(myEditText.getText().toString().equals("")) // disable positive button if this is empty
{
Toast.makeText(getActivity(), "enter something!", Toast.LENGTH_SHORT).show();
}
else { myListener.onSet(myEditText.getText().toString()); }
}
})
.setNegativeButton(getString(R.string.sCancelButton), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do nothing
}
});
return builder.create(); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialog android-dialogfragment
我正在尝试创建一个类似于a的简单对话框DatePickerDialog.的Dialog,我应该创造提供,他们可以选择像阵列的用户.
我相信我已经设法创建了数组并为其添加了正确的图像,我现在遇到的问题是如何让它Dialog出现?我该怎么回事?
我已经研究过AlertDialogs这样,但我不确定如何实施它们.
更新:固定问题,代码显示在下面是功能
图片采摘
public class PicturePickerFragment extends DialogFragment {
ArrayList<Integer> imageList = new ArrayList<Integer>();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// fill an array with selected images
String title = "Picture";
imageList.add(R.drawable.barbershop);
imageList.add(R.drawable.wedding);
imageList.add(R.drawable.meeting);
imageList.add(R.drawable.barbershop);
// return alertdialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout …Run Code Online (Sandbox Code Playgroud) android android-fragments android-alertdialog android-dialog android-dialogfragment
我正在考虑对话框的外观.引用设计指南:
由于移动设备上的空间有限,可能在全屏对话框中更适当地呈现可能在其他形状因素(平板电脑,桌面等)中显示为对话的内容.
这对我来说似乎很合理.根据屏幕尺寸将对话框显示为嵌入式/全屏的内容也在这里.基本上,你可以:
public Dialog onCreateDialog()你的DialogFragment电话.show();public View onCreateView()并提交片段事务.我认为这是一个简单的任务,但我有一些关于全屏对话框以及如何管理它们的概念问题.我甚至不确定全屏对话框的设计指南是否真的如此DialogFragment.
例如,在我链接的图片中,全屏片段对话框有一个工具栏.
在全屏对话框中,确认和拒绝操作位于屏幕顶部.
全屏对话框的工具栏样式非常奇特:X要解除,标题,确认右侧的操作.这些项目是浮动项目的全屏版本,AlertDialog这里没什么新东西.
我想知道的是 - 我必须两次处理这些操作,一次是针对浮动还是一次针对全屏版本?我是否必须设置两个版本的对话框?
而且,工具栏来自哪里?我们应该加载对话框片段android.R.id.content并Toolbar在片段内添加吗?我们应该将它加载到实际的活动布局中,并在运行时重新设计工具栏吗?我们是否应该将对话框片段视为a Dialog,并show()使用特定的窗口属性(但是,删除底部的按钮,添加工具栏......)?
我在想这个过程是由DialogFragment类自动管理的,但看起来并不是这样.
android android-fragments android-dialog android-dialogfragment
我正在尝试创建自定义对话框
基本布局(我也尝试了各种修改过的布局)
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@color/dialogHeaderBackground"
android:gravity="center"
android:minHeight="@dimen/minHeightDialogTitle"
android:text=""
android:textStyle="bold" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/title"
android:layout_marginTop="5dp"
android:text="" />
<LinearLayout
android:id="@+id/loutButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@+id/message"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<Button
android:id="@+id/btnNeutral"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
<Button
android:id="@+id/btnNegative"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
<Button
android:id="@+id/btnPositive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Java代码
Dialog dialog = new Dialog(this);
// Dialog dialog = new Dialog(this,R.style.Theme_Dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
Button btnPositive=(Button) dialog.findViewById(R.id.btnPositive);
Button btnNegative=(Button) …Run Code Online (Sandbox Code Playgroud) 我有2个弹出窗口.在第一个弹出窗口我有ListView可选项目.当我从第一个列表中单击项目时,将出现第二个弹出窗口,其中还包含ListView要选择的选项.
我已经将第一个列表视图项实现为自定义View并订阅了视图构造函数中的单击,如下所示:
class CustomListItem extends RelativeLayout{
public CustomListItem(){
...
//inflating stuff there
((Button)findViewById(R.id.listItemButton)).setOnClickListener(
//This code not working as expected, but then could fire a lot of times
v -> System.out.println("item clicked");
);
}
}
Run Code Online (Sandbox Code Playgroud)
当我第一次打开第一个对话框时,onClick处理程序按预期触发并出现第二个弹出窗口.但是当我关闭第二个弹出窗口并返回(调用Dialog.dismiss()弹出窗口)到第一个弹出窗口时,onClick第一个listview上的处理程序停止工作.还有一些其他的东西:
onTouch列表视图项的监听器仍在工作(调用action=ACTION_DOWN
和action=ACTION_UP);onItemClickListener它总是被调用(第一次打开弹出窗口,当我们返回它时);onClick
时,有时会发生这种情况,然后在我之前单击之前调用它多次.您有什么想法可能是问题的原因吗?
UPDATE
似乎getView适配器内部的方法存在问题.我试图在其中创建一个自定义列表项控件(或从缓存中获取):
@Override
public View getView(int position, View view, ViewGroup parent) {
if (!constructedViewCache.containsKey(position)) {
constructedViewCache.put(position, new CustomListItem …Run Code Online (Sandbox Code Playgroud) 假设您有一个应用程序A,它可以打开另一个不受您控制的应用程序B(例如,地图)(即它是一个已有的应用程序)。因此,现在应用程序A在后台。假设发生了一个事件,并且A希望在应用B的UI上显示一个浮动对话框(同时使应用B的活动保持可见)。这可能吗?
(对此的通常答案是显示通知,但这不是大众市场应用,我们正在尝试直接吸引用户的注意。)
目前,我正在尝试执行以下操作:
// This code runs in a class other than app A's main activity,
// and the "activity" variable used here is a reference to that activity.
Intent intent = new Intent(activity, NotificationDialogActivity.class);
// EDIT: I'm not exactly sure whether NEW_TASK helps here or not
// so I removed it, but the REORDER_TO_FRONT would ideally cause
// app A's dialog activity to be moved to the front of the back stack?
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// The "msg" variable …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义对话框主题,如下所示:
<style name="dialogLight" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">attr/theme_dialogBackground</item>
</style>
Run Code Online (Sandbox Code Playgroud)
然而,当我运行应用程序时,dialog背景是默认设置(在一台设备上是透明的,在另一台设备上是黑色的).
但是,如果我更改android:windowBackground为android:background,android:background则会看到正确的行为,并且对话框中所有视图的默认背景将成为指定的值.
将android:windowBackground的值更改为@drawable或@color工作.
我知道android:windowBackground和之间有什么区别android:background,并且使用android:background不是我需要的,因为我只想改变窗口背景颜色.
那么为什么android:windowBackground不被应用呢?