标签: android-dialog

如何在onCreate方法中取消或关闭自定义对话框?

我创建了一个名为MyCustomDialogextends 的自定义对话框Dialog.我创建并显示我的自定义对话框,如下所示:

new MyCustomDialog(myContext).show();
Run Code Online (Sandbox Code Playgroud)

我重写了Dialog.onCreate(Bundle savedInstanceState)我的初始化方法.我也检查这个方法是否存在某个条件,如果没有,我想解除/取消我的对话.我已经打过电话了cancel(),并dismiss()在我的对话框的方式onCreate(Bundle savedInstanceState)onStart()方法,但它没有任何效果.

任何人都知道如何在显示之前取消或关闭对话框(在对话框内)?

android android-dialog

5
推荐指数
1
解决办法
2243
查看次数

更改AlertDialog.Builder按钮颜色

我试图改变AlertDialog.Builder的按钮颜色,但我没有找到一种方法来做到这一点.

我希望将按钮的颜色和标题更改为白色,就像在HOLO主题中一样.

请参阅以下2个屏幕截图作为示例:

在此输入图像描述

在此输入图像描述

我看过这里:

如何更改AlertDialog的主题

更改AlertDialog的样式

如何更改自定义警报对话框的背景

应用Android样式

所有这些都不适合我.

这是我的代码:

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)

android android-dialog

5
推荐指数
1
解决办法
1万
查看次数

如何在方向更改时保留datetime对话框的状态?

在方向更改时,将重新创建活动并重新创建日期时间对话框.我想保存用户已更改的日期时间对话框的状态.

在我关闭对话框之前,我想保留日期时间对话框的状态.

注意,我可以在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

5
推荐指数
1
解决办法
499
查看次数

在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

5
推荐指数
1
解决办法
2394
查看次数

自定义对话框片段

我正在尝试创建一个类似于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

5
推荐指数
1
解决办法
2万
查看次数

如何在Android中管理全屏对话框?

我正在考虑对话框的外观.引用设计指南:

由于移动设备上的空间有限,可能在全屏对话框中更适当地呈现可能在其他形状因素(平板电脑,桌面等)中显示为对话的内容.

这对我来说似乎很合理.根据屏幕尺寸将对话框显示为嵌入式/全屏的内容也在这里.基本上,你可以:

  • 对于小屏幕,覆盖public Dialog onCreateDialog()你的DialogFragment电话.show();
  • 对于宽屏幕,也可以覆盖public View onCreateView()并提交片段事务.

我认为这是一个简单的任务,但我有一些关于全屏对话框以及如何管理它们的概念问题.我甚至不确定全屏对话框设计指南是否真的如此DialogFragment.

例如,在我链接的图片中,全屏片段对话框有一个工具栏.

在全屏对话框中,确认和拒绝操作位于屏幕顶部.

全屏对话框的工具栏样式非常奇特:X要解除,标题,确认右侧的操作.这些项目是浮动项目的全屏版本,AlertDialog这里没什么新东西.

我想知道的是 - 我必须两次处理这些操作,一次是针对浮动还是一次针对全屏版本?我是否必须设置两个版本的对话框?

而且,工具栏来自哪里?我们应该加载对话框片段android.R.id.contentToolbar在片段内添加吗?我们应该将它加载到实际的活动布局中,并在运行时重新设计工具栏吗?我们是否应该将对话框片段视为a Dialog,并show()使用特定的窗口属性(但是,删除底部的按钮,添加工具栏......)?

我在想这个过程是由DialogFragment类自动管理的,但看起来并不是这样.

android android-fragments android-dialog android-dialogfragment

5
推荐指数
0
解决办法
548
查看次数

为什么android自定义对话框全屏显示

我正在尝试创建自定义对话框

基本布局(我也尝试了各种修改过的布局)

<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)

java android android-layout android-xml android-dialog

5
推荐指数
1
解决办法
1202
查看次数

onClick事件不适用于android中的嵌套listview项控件

我有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上的处理程序停止工作.还有一些其他的东西:

  1. onTouch列表视图项的监听器仍在工作(调用action=ACTION_DOWNaction=ACTION_UP);
  2. 当我为listview设置时,onItemClickListener它总是被调用(第一次打开弹出窗口,当我们返回它时);
  3. 当我在列表视图中的项目上多次单击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)

android listview android-dialog

5
推荐指数
1
解决办法
600
查看次数

在后台显示另一个应用程序的对话框活动

假设您有一个应用程序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)

android android-dialog android-activity android-task

5
推荐指数
1
解决办法
4066
查看次数

android:windowBackground无法正常工作

我创建了一个自定义对话框主题,如下所示:

<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:windowBackgroundandroid:background,android:background则会看到正确的行为,并且对话框中所有视图的默认背景将成为指定的值.

将android:windowBackground的值更改为@drawable或@color工作.

我知道android:windowBackground和之间有什么区别android:background,并且使用android:background不是我需要的,因为我只想改变窗口背景颜色.

那么为什么android:windowBackground不被应用呢?

android android-dialog android-styles

5
推荐指数
1
解决办法
1824
查看次数