我正在为Android可穿戴设备创建一个应用程序。
当将自定义布局显示为对话片段时,应用程序将在大约30秒后最小化(被手表表面取代)。我知道这应该是脱离用户的应用程序的默认行为,但在我的例子中,应用程序需要保持可见,即使四分钟没有触摸。
调用它的活动确实在其onCreate
实现中获得了这些指令。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这就像一个护身符,并以我想要的方式。但是,用作错误通知的DialogFragment (可能需要在一段时间内不接触它)不遵循此设置。
我也试图通过将标志放在onViewCreated
调用中来获得DialogFragment
中的标志,但它没有getWindow
方法。虽然下一个代码段是有效的,但is也不起作用。
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
对话框片段的调用方式如下所示。这是从需要显示它的FragmentActivity调用它的代码。正如您可能注意到的,有一个字段" activity ",这是因为整个调用都是从activity外部的静态类完成的。我想从多个活动调用相同的DialogFragment,只是文本和标题不同。
public static void showDialogCuston(String title, String message, FragmentActivity activity){
ErrorDialogFragment edf = ErrorDialogFragment.newInstance(title,message);
FragmentManager fm = activity.getSupportFragmentManager();
edf.show(fm, "TAG");
}
这就是DialogFragment内部的样子。我剔除了所有TextView
文本赋值,因为我怀疑它们是否能提供有关该请求的任何类型的信息,这只会降低代码片段的可读性。
public class ErrorDialogFragment extends DialogFragment {
//some private text views
public ErrorDialogFragment(){
}
public static ErrorDialogFragment newInstance(String title, String text){
ErrorDialogFragment edf = new ErrorDialogFragment();
Bundle args = new Bundle();
args.putString("title",title);
args.putString("text",text);
edf.setArguments(args);
return edf;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_error, container, false);
// R.layout.fragment_error is the layout that serves as my custom dialog
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//assigning layout elements to private fields
//assigning stuff from the bundle inside some textViews
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
//playing a sound from SoundPool and doing haptic feedback on button press
}
});
}
}
所以,我想要的是,当用户长时间盯着DialogFragment
看而不去触摸它时,这款应用程序不会自动消失。
发布于 2019-08-23 06:47:41
在您的例子中,我建议在对话框布局文件中保留屏幕打开标志,这样当对话框视图可见时,它会保持屏幕打开。有关更多信息,请查看developer's documentation。但是,为了方便起见,我添加了文档中的代码。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
在对话框布局的根元素中将android:keepScreenOn
设置为true
。我希望您在AndroidManifest.xml
文件中也具有以下权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
https://stackoverflow.com/questions/57621037
复制