我为我的应用程序实现了一个自定义对话框.我希望实现当用户在对话框外单击时,对话框将被取消.我该怎么做?
android dialog android-emulator android-layout android-dialog
当我尝试打开对话框时,我收到以下Android异常.有人可以帮我理解发生了什么,我该如何解决这个问题?
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
Run Code Online (Sandbox Code Playgroud) android runtimeexception android-dialog android-windowmanager
我有一些需要显示常规对话框的片段.在这些对话框中,用户可以选择是/否答案,然后片段应该相应地运行.
现在,Fragment该类没有onCreateDialog()覆盖的方法,所以我想我必须在包含的外部实现对话框Activity.没关系,但是Activity需要以某种方式向片段报告所选择的答案.我当然可以在这里使用回调模式,因此片段在Activity一个监听器类中注册自己,而Activity会通过它报告回答,或类似的东西.
但对于一个简单的任务来说,这似乎是一个相当大的混乱,因为在一个片段中显示一个"简单的"是 - 否对话框.而且,这样我的Fragment自足也会减少.
有没有更清洁的方法来做到这一点?
编辑:
这个问题的答案并没有真正详细解释如何使用DialogFragments来显示Fragments中的对话框.所以AFAIK,走的路是:
.setTargetFragment().API说警报对话框可以有一个,两个或三个按钮,但SDK只允许正面和负面按钮.那怎么可以添加第三个按钮?
当我的活动显示自定义对话框时,如何保持新的沉浸式模式?
我正在使用此代码来维护对话框中的沉浸模式,但是使用此解决方案,当我启动自定义对话框时,NavBar会出现不到一秒钟,然后它就会消失.
这是一个更好地解释问题的视频(当NavBar出现时查看屏幕底部):http://youtu.be/epnd5ghey8g
我该如何避免这种行为?
码
我申请中所有活动的父亲:
public abstract class ImmersiveActivity extends Activity {
@SuppressLint("NewApi")
private void disableImmersiveMode() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
);
}
}
@SuppressLint("NewApi")
private void enableImmersiveMode() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
}
}
/**
* Set the Immersive mode or not according to its state in the settings:
* enabled or not.
*/
protected void updateSystemUiVisibility() {
// Retrieve …Run Code Online (Sandbox Code Playgroud) android dialog android-dialog android-activity android-4.4-kitkat
我想做的是:我正在尝试制作自定义对话框.圆角.
什么是happing:我能够进行自定义对话,但它没有圆角.我尝试添加一个选择器,但我还是不能
Java代码:
private void launchDismissDlg() {
dialog = new Dialog(getActivity(), android.R.style.Theme_Dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dlg_dismiss);
dialog.setCanceledOnTouchOutside(true);
Button btnReopenId = (Button) dialog.findViewById(R.id.btnReopenId);
Button btnCancelId = (Button) dialog.findViewById(R.id.btnCancelId);
btnReopenId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
btnCancelId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
dialog.show();
}
Run Code Online (Sandbox Code Playgroud)
xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) 我需要在片段上创建一个对话框(占据整个屏幕).该对话框需要是一个浮动对话框,它将定位在片段上,片段在片段外面变暗.
对于自定义对话框,我有一个具有弯曲边缘的linearLayout,无论我做什么,对话框都有一个黑色边缘(非常小).我已经尝试了一切使其透明并消失(所以所有的对话框只是线性布局 - 弯曲的盒子)
对于DialogFragment,这就是我对onCreateView的看法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
populateItemData(item, inflater);
return layout;
}
Run Code Online (Sandbox Code Playgroud)
custom_dialog只是一个将android:backgroung设置为#000000的LinearLayout
这是我自定义Dialog的样式
<style name="CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:alwaysDrawnWithCache">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我尝试了这种风格的各种组合(从我在网上看到的)并且我无法摆脱那种恼人的黑色边界,如果我将LinearLayout背景设置为除了以外的任何其他颜色,我可以将其绘制为白色或任何其他颜色#000000 ...
我已经花了3-4个小时,我希望其他人可以帮忙...
android android-layout android-fragments android-dialog android-dialogfragment
我希望能够创建一个允许用户从指定范围中选择一个数字的Dialog.
我知道现有的小部件(比如来自quietlycoding的那些小部件和SimonVT的小部件)已经做到了,但是我很难将这些小部件正确地集成到我的应用程序中.此外,这些主要是小部件.我想要的东西与android开发者页面教程中的东西非常相似.
我还检查了NumberPicker的文档,它说要检查TimePicker和DatePicker的示例,但它们只显示如何使用时间和日期选择器,我很难感觉到我的方式绕过代码并尝试转换时间选择器只是一个正常的数字选择器.有谁知道从哪里开始?我一直在寻找最近3个小时的解决方案无济于事.
我开始使用DialogFragment,因为他们通过方向更改和其他东西很好地工作.但是我遇到了令人讨厌的问题.
我有AsyncTask显示进度DialogFragment并解散它onPostExecute.一切正常,除非在onPostExecute应用程序处于后台时发生(例如,在按下Home按钮后).然后我在DialogFragment解雇时得到了这个错误 - " Can not perform this action after onSaveInstanceState".卫生署.常规对话框工作得很好.但不是FragmentDialog.
所以我想知道,在应用程序处于后台时,解雇DialogFragment的正确方法是什么?我没有真正使用Fragments,所以我认为我只是遗漏了一些东西.
android android-fragments android-dialog android-dialogfragment
我正在使用谷歌示例使用对话框片段在我的应用程序中插入一个日期选择器
http://developer.android.com/guide/topics/ui/controls/pickers.html
但是我不确定如何在设置之后获得日期(不是java专家).对话框和日期选择器运行正常,我可以记录该日期是否已正确设置但是,如何才能在父活动上执行回调?
这是我的Dialog片段
public class DatePickerFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
**Log.w("DatePicker","Date = " + …Run Code Online (Sandbox Code Playgroud)