我正在构建一个包含多项选项(复选框)的对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMultiChoiceItems(arrayResource, selectedItems, new DialogInterface.OnMultiChoiceClickListener() {
// ...
});
AlertDialog dialog = builder.create();
dialog.show();
Run Code Online (Sandbox Code Playgroud)
我有一个复选框的自定义样式:
<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
<item name="android:textColor">@android:color/holo_purple</item>
</style>
Run Code Online (Sandbox Code Playgroud)
通过设置应用于布局中的各个复选框时,它可以很好地工作style="@style/CustomCheckBox".
但是,如何将此样式应用于创建的对话框?或者对整个主题来说......
如果它有点相关 - 我正在使用minSdkVersion=14和targetSdkVersion=19.
更新:
现在根据MattMatt的回答,我将自定义复选框样式应用于整个主题,并为对话框设置自定义样式:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:checkboxStyle">@style/CustomCheckBox</item>
<item name="android:dialogTheme">@style/CustomDialog</item>
<item name="android:alertDialogTheme">@style/CustomDialog</item>
</style>
<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
<item name="android:checkMark">@drawable/btn_check</item>
</style>
<style name="CustomDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:checkboxStyle">@style/CustomCheckBox</item>
<item name="android:background">#aaf</item>
</style>
Run Code Online (Sandbox Code Playgroud)
现在添加到布局的任何复选框都会获得自定义样式,我可以更改对话框的背景,但对话框中的复选框不会受到任何影响......
checkbox android android-theme android-dialog android-styles
如何禁用BottomSheetDialogFragment手指拖动?
我看到了类似的问题,但他们BottomSheet都不是BottomSheetDialogFragment.
android android-layout android-view android-dialog bottom-sheet
有没有办法DialogPreference在任何事件中获得a的正面按钮?
我想最初禁用它,并在EditText验证后启用它.
问题是,无论我在何处或如何调用此布局的组件,它们始终返回null.
setView(inflater.inflate(R.layout.search_layout, null))
Run Code Online (Sandbox Code Playgroud)
这很好用.它显示了里面的布局Dialog,但是,子节点总是返回为null findViewById(R.id.some_search_layout_children).
我试图清理我的项目多次,试图实现另一个类我Dialog,叫findViewById()我的主要成员Activity,内部initSearch()方法,以及一个匿名实现内部OnClickListener的Dialog,但都具有相同的结果.我还尝试将孩子们分成独立的Views并以编程方式调用它们:
TextView text = (TextView) findResourceById(R.id.new_independant_textview);
Run Code Online (Sandbox Code Playgroud)
但是,同样的结果.
这是相关代码:
public class Xyz extends Activity {
public void onCreate(...) { // some listener will trigger initSearch() }
private void initSearch() {
AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
searchDialog.setTitle("Search Photos");
searchDialog.setMessage("Specify tag and value...");
// R.layout.search_dialog is my custom layour, it displays fine, it works.
searchDialog.setView(inflater.inflate(R.layout.search_dialog, null));
EditText …Run Code Online (Sandbox Code Playgroud) android nullpointerexception android-dialog findviewbyid android-resources
我想要这样的东西:

用户个人资料图片在对话框边界上"弹出".
我已经尝试了所有的东西:在太阳下乱用每个可能的组合剪辑,在对话框之后动态创建视图并将其添加到根内容视图,使用单独的视图并使用Dialog.setCustomTitle()加载,黑客攻击图像onDraw()方法并应用各种边界/位置黑客 - 但无论图像总是被剪切并分成两半.
我甚至已经去了解Play商店APK并看看他们是如何做到的.不幸的是,资源文件没有太大的余地,我在Smali找不到任何东西.
有人可以帮忙吗?请... :-(
编辑:我只是专门讨论对话框顶部的用户配置文件图像,而不是对话框本身.
目前,我有以下对话框,我将对其项目执行展开/折叠动画.
该对话框通过以下代码创建
import android.support.v7.app.AlertDialog;
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
final AlertDialog dialog = builder.setView(view).create();
final ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
ViewTreeObserver obs = view.getViewTreeObserver();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
// http://stackoverflow.com/questions/19326142/why-listview-expand-collapse-animation-appears-much-slower-in-dialogfragment-tha
int width = dialog.getWindow().getDecorView().getWidth();
int height = dialog.getWindow().getDecorView().getHeight();
dialog.getWindow().setLayout(width, height);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,当执行动画时,这是副作用.
请注意,动画后对话框中不需要的额外白色区域不是由我们的自定义视图引起的.它是对话框本身的系统窗口白色背景.
我倾向于使对话框的系统窗口背景变得透明.
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
final AlertDialog dialog = builder.setView(view).create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)
虽然不再看到不需要的白色背景,但对话框的原始边距也消失了.(对话框宽度现在是全屏宽度)
如何在不影响保证金的情况下使其透明?
我是 jetpack compose 的新手,我真的很想知道如何消除可组合对话框。jetpack compose 中的对话框是否有像 dismiss() 这样的函数?
通过使用下面的代码,我无法关闭该对话框,无论是触摸外部还是按后退按钮。该对话框在视图层次结构的顶部仍然可见。`
@Composable
fun InfoDialog() {
val shouldDismiss = remember {
mutableStateOf(false)
}
Dialog(onDismissRequest = {
shouldDismiss.value = false
}, properties = DialogProperties(
dismissOnBackPress = true,
dismissOnClickOutside = true
)) {
Card(
shape = RoundedCornerShape(8.dp),
modifier = Modifier.padding(16.dp,8.dp,16.dp,8.dp),
elevation = 8.dp
) {
Column(
Modifier.background(c282534)) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = "Notice",
textAlign = TextAlign.Center,
modifier = Modifier
.padding(top = 8.dp)
.fillMaxWidth(),
style = TextStyle(fontWeight = FontWeight.Bold, color = Color.White, fontSize …Run Code Online (Sandbox Code Playgroud) android dialog android-dialog android-jetpack-compose android-compose-dialog
我试图用一个看起来完全像这样的选择器做一个Dialog:

我尝试过使用一个包含ListView的AlertDialog,但这会在ListView和底部灰色区域之间产生一个丑陋的黑色边框.我可以使用普通的Dialog,但我不想手动构建底部灰色区域.
我知道我可以继承AlertDialog,但是我还需要继承Builder,它最终会成为很多细节的代码.这样做有什么好办法吗?
干杯,
我正在寻找一种方法来获得自定义对话框的大小.我经历了这个问题,但是给出的唯一答案是没用的,因为如果我尝试mDialog.getWindow().getAttributes().height;它只返回-2,这是WRAP_CONTENT我设置为对话的属性的常量.我怎样才能得到它的大小.我想知道背景图像的siye.
我必须在Dialog上显示ListView包含EditText,用户可以在EditText中键入文本,其内容不应丢失.
例如,我有10个的EditText在列表视图中,如果用户键入"11",在第一个的EditText在第三的EditText,"22"在第二的EditText,"33",而该用户后向下滚动在第十的EditText列表视图再次在滚动它向上第一个EditText当时第一个EditText中的值应为"11",对于第二个EditText"22"依此类推,我通过在EditText中更改文本时设置EditText来实现此目的.
我使用NiftyDialog作为对话框(链接).问题是EditText随机聚焦(有时候工作,有时不工作).
我已经设定
机器人:descendantFocusability = "afterDescendants"
在ListView和设置中
机器人:windowSoftInputMode = "adjustPan"
在Manifest文件中,但它无法正常工作.
这可能是什么问题?
android focus android-listview android-edittext android-dialog
android ×10
android-dialog ×10
dialog ×2
android-ui ×1
android-view ×1
bottom-sheet ×1
checkbox ×1
findviewbyid ×1
focus ×1
java ×1