我想Dialog用EditText. 我设想它有两个按钮:一个肯定按钮,它将保留包含在 中的文本EditText,以及一个否定按钮,它将取消并返回到Activity启动它的 就好像什么都没发生过一样。我试过使用一个AlertDialog没有成功:
AlertDialog.Builder builder = new Builder(context);
final EditText text = new EditText(context);
builder.setTitle("New Profile").setMessage("Name this new profile").setView(text);
builder.setPositiveButton("Create", new OnClickListener() {
public void onClick(DialogInterface di, int i) {
final String name = text.getText().toString();
//do something with it
}
});
builder.setNegativeButton("Cancel", new OnClickListener() {
public void onClick(DialogInterface di, int i) {
}
});
builder.create().show();
Run Code Online (Sandbox Code Playgroud)
我的setView()方法有问题吗?使用自定义Dialog会更实用吗?
编辑:
我得到了几个答案,说代码对他们有用……不知道为什么它对我不起作用。这是logcat:
E/AndroidRuntime( 326): FATAL EXCEPTION: main
E/AndroidRuntime( 326): …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有几个活动一个接一个。在我的登录屏幕之后,我有主屏幕,然后是几个屏幕。现在,当用户选择设备主页按钮或电源关闭按钮时,我想在用户再次访问我的应用程序和主页屏幕时显示登录屏幕。休息所有活动,我正在从我的基类完成它。现在到这里我已经完成了,我的问题是当我在其他一些活动中显示一个对话框时,如果用户点击主页或电源按钮,那么我会收到WINDOW LEAKED EXCEPTION。

就像我有 TempActivity 正在显示一个对话框并且用户单击主页按钮这样 StoreActivity 和 TempActivity 将完成但对话框从未有机会被解雇。那么处理这种情况的最佳方法是什么。有没有更好的方法来关闭对话框,这样我就不会出现任何异常。
我已经实现了一个 dialogFragment,它显示了一条简单的消息:
private static DialogFragment loadingDialogFragment = null;
public void showLoadingDialog(String title, String message) {
loadingDialogFragment = new LoadingDialogFragment();
Bundle args = new Bundle();
args.putString("title", title);
args.putString("message", message);
loadingDialogFragment.setArguments(args);
loadingDialogFragment.show(fragManager, "loadingDialog");
}
public void dismissLoadingDialog() {
if (loadingDialogFragment != null) {
loadingDialogFragment.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果显示对话框并且我旋转屏幕,则我的 dissmisslaodingDialog 不起作用。我认为这是因为当您旋转时,它会再次调用 on create 函数并丢失对对话框的引用,但我已将其设为静态。
上面的代码放在一个 Utility 类中,我从我的活动中调用它,如下所示:
util.showLoadingDialog("Loading", "");
SendCommand(deviceId, "Command");
Run Code Online (Sandbox Code Playgroud)
然后我调用utils.dismissLoadingDialogSendCommmand 的回调函数。
我在这里缺少什么?
{编辑}
我的活动片段中的代码
util.showLoadingDialog("Loading", "");
SendCommand(deviceId, "Command");
public void SendCommand(int deviceId, final String command) {
Network.get(mContext, "/" + command …Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialog android-dialogfragment
我是新来的android。我需要获得editText's价值来搜索某些东西。但是当我运行程序时,错误出现在null pointer exception.
“EditText etSearch”没有得到它的文本。
请帮我。谢谢。
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_search) {
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
// Get the layout inflater
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
// Inflate and set the layout for the dialog …Run Code Online (Sandbox Code Playgroud) 我创建了自定义对话框并希望将其绑定到我的列表项。我希望这个对话框在长按列表项时表现得像上下文菜单。
换句话说,我不希望此对话框出现在屏幕中央,而是出现在列表中的项目附近。
我花了很多时间寻找方法,但不幸的是没有结果。有什么好的解决办法吗?
看了很多类似的问题但没有运气......
我正在尝试找到使用媒体控制器播放视频的正确方法(半屏窗口,需要时也可以全屏)。视频应该漂浮在本机控件之上,视频和本机控件都可以接收触摸事件(都是可点击的。就像 Facebook Messenger 图标)。
现在我正在做的事情:我启动一个透明的活动,并在 a 中播放视频,VideoView并将其布局参数和活动的布局参数设置为占据屏幕的一半。另一半是本机屏幕。我将窗口设置为:
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY)
这样做的作用是,我可以看到正在播放的视频,VideoView 但无法触摸和使用其媒体控制器(播放、暂停等),但我可以看到可以触摸的本机屏幕!
我尝试了不同的标志来启用媒体控制器,但随后VideoView完全消耗触摸事件。这意味着现在我无法触摸它后面的本机屏幕的一半。
本机屏幕顶部的 VideoView - 两者都可以处理触摸事件, 我认为可能使用对话框或弹出窗口,但找不到说对话框可以接收触摸事件而本机屏幕也可以接收触摸事件的内容。
视频应该始终位于最上面。提前致谢 !:)
android android-dialog android-windowmanager android-videoview android-popupwindow
到目前为止,我设法像这样更改背景颜色:
<style name="DialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog" >
<item name="android:backgroundTint">#141414</item>
</style>
Run Code Online (Sandbox Code Playgroud)
并像这样应用它:
TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity(), R.style.DialogTheme, listener, hour, minute, false);
Run Code Online (Sandbox Code Playgroud)
我正在运行 Android Pie。
这是我使用的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top|center_horizontal"
android:background="@color/white"
android:gravity="top|center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/provisioningTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Phone Number" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是我创建对话框的类:
open class DialogProvisioningData : BottomSheetDialog {
constructor(context: Context) : super(context)
private lateinit var mBehavior: BottomSheetBehavior<FrameLayout>
override fun setContentView(view: View) {
super.setContentView(view)
val bottomSheet = window.decorView.findViewById<View>(R.id.design_bottom_sheet) as FrameLayout
mBehavior = BottomSheetBehavior.from(bottomSheet)
mBehavior.peekHeight = Resources.getSystem().getDisplayMetrics().heightPixels
mBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
override fun onStart() {
super.onStart()
mBehavior.peekHeight = Resources.getSystem().getDisplayMetrics().heightPixels
mBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
companion object {
fun newInstance(context: Context): DialogProvisioningData {
val …Run Code Online (Sandbox Code Playgroud) 在首选项屏幕中,我想使用 MaterialComponent 的对话框(使用MaterialAlertDialogBuilder)而不是AlertDialogAppCompat 的对话框。然而,AppCompat 的首选项框架使用AlertDialog.Builder.
据我所知,覆盖它的唯一方法是覆盖:PreferenceFragmentCompat.onDisplayPreferenceDialog()并从该超类复制一堆逻辑(在显示对话框片段等方面)。
这是正确的方法还是有更好的方法?
android-preferences android-dialog android-dialogfragment material-design
AlertDialog像下面这样简单
AlertDialog(
modifier = Modifier,
title = {
Text(text = "Title")
},
text = {
Column(
modifier = Modifier.fillMaxWidth()
) {
TextButton() {
Text("Text 1")
}
TextButton() {
Text("Text 2")
}
}
},
confirmButton = {},
dismissButton = {}
)
Run Code Online (Sandbox Code Playgroud)
如何设置标题和第一个之间的间距TextButton?
我尝试将 a 设置.padding(top = X.dp)为“列”或第一个文本按钮,但这似乎只在 .txt 文件的底部创建一个空间AlertDialog。
设置自定义也.height(X.dp)不起作用。
我正在使用撰写1.0.3
android spacing android-layout android-dialog android-jetpack-compose