我有这个代码来显示可供下载的语言列表:
public void onCreateDialog(ArrayList<String>fullLangArray, final ArrayList<String>codeLangArray) {
final String[] items = fullLangArray.toArray(new String[fullLangArray.size()]);
final ArrayList mSelectedItems = new ArrayList();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// Set the dialog title
builder.setTitle("Updates...")
.setMultiChoiceItems(items, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexSelected,
boolean isChecked) {
if (isChecked) {
mSelectedItems.add(Utils.SERVER_ADDRESS + "/" + codeLangArray.get(indexSelected) + ".zip");
} else if (mSelectedItems.contains(indexSelected)) {
mSelectedItems.remove(Integer.valueOf(indexSelected));
}
}
})
.setPositiveButton("Download", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
DownloadTask downloadTask = new …Run Code Online (Sandbox Code Playgroud) 我试图在我的应用程序中实现一个简单的逻辑,其中向用户显示一个弹出窗口(在应用程序启动一段时间后)。弹出窗口只显示TextView带有一些信息的消息。每次启动应用程序时都会刷新此消息并显示一条新消息。弹出窗口的 UI 与我的应用程序 UI 匹配 - 这里可能只需要弹出背景图像。还有一个关闭按钮 (X) 显示在弹出窗口的右上角 - 关闭此弹出窗口。
显示消息的逻辑:我有一个String数组,其中存储了大约 100 个字符串。我从这个数组中随机选择一个字符串并填充TextView显示消息的弹出窗口。请建议是否有比我已经在这里做的更好的方法。是否也有可能逻辑,如果选择了一条消息,那么在其他消息至少显示一次之前不会选择相同的消息?
显示弹出窗口的逻辑:这是我无法实现的。我不想用任何用户Event或Button点击来锚定弹出窗口。我只是想在一段时间后显示消息 - 说
线程睡眠(3000);
现在我尝试使用PopupWindow下面的代码来使用它。
PopupWindow infoPopup;
LinearLayout infoLayout;
TextView infoTextView;
Button infoButton;
infoTextView = new TextView(this);
infoTextView.setText("Testing Popup Text");
infoTextView.setPadding(10,10,10,10);
infoButton = new Button(this);
infoButton.setText("Close");
infoLayout = new LinearLayout(this);
infoLayout.setOrientation(LinearLayout.VERTICAL);
infoLayout.addView(infoTextView);
infoLayout.addView(infoButton);
infoPopup = new PopupWindow(infoLayout,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
infoPopup.setContentView(infoLayout);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
infoPopup.showAtLocation((CoordinatorLayout)findViewById(R.id.main_content),Gravity.CENTER,100,100);
Run Code Online (Sandbox Code Playgroud)
但是这个弹出窗口在最后一行显示错误,在我的
(CoordinatorLayout)findViewById(R.id.main_content)
范围。 …
private void openDialog(){
LayoutInflater inflater = LayoutInflater.from(TrueAct.this);
View subView = inflater.inflate(R.layout.newdialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Enter New");
builder.setView(subView);
blEntryExistToday = true;
builder.setPositiveButton("ADD", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (!blEntryExistToday) {
//CLOSE DIALOG
}
else {
tvM.setText("An entry for this day already exist!");
//DO NOT CLOSE DIALOG
}
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Cancel", Toast.LENGTH_LONG).show();
//CLOSE THE DIALOG
}
});
builder.show();
}
Run Code Online (Sandbox Code Playgroud)
无论我单击添加还是取消,对话框都会关闭。如果 …
我已经显示AlertDialog了 2 个按钮,即是和取消,这是代码。
final AlertDialog.Builder builder = new AlertDialog.Builder(RiderDetailActivity.this);
builder.setCancelable(false);
builder.setMessage("Are you sure?");
final AlertDialog dialog = builder.create();
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.show();
Run Code Online (Sandbox Code Playgroud)
这仅在三星 Galaxy s4 上不显示是和取消按钮
但是当我将它与它一起使用dialog.setButton时效果很好
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override …Run Code Online (Sandbox Code Playgroud) 是的,这被问到了几种方式,但没有一种方法有效。
我正在尝试将对话框宽度扩展到全屏。
对话框布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraint_layout"
android:layout_width="match_parent"
android:layout_height="300dp">
<android.support.constraint.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.08" />
<TextView
android:fontFamily="@font/gotham_medium_regular"
android:textAllCaps="true"
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Login"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:fontFamily="@font/gotham_light"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:layout_marginTop="8dp"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toBottomOf="@+id/textView6"
android:id="@+id/textView7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Enter your phone number to proceed" />
<android.support.design.widget.TextInputLayout
android:id="@+id/text_input"
android:layout_marginTop="24dp"
android:layout_width="0dp"
app:layout_constraintTop_toBottomOf="@+id/textView7"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3">
<android.support.design.widget.TextInputEditText
android:id="@+id/userPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/gotham_light"
android:hint="PHONE NUMBER"
android:inputType="phone"
android:text="+91" />
</android.support.design.widget.TextInputLayout>
<android.support.constraint.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.92" />
<Button
android:layout_marginBottom="@dimen/activity_horizontal_margin"
android:id="@+id/continueButton"
android:layout_width="0dp"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) 在 Android 中,制作AlertDialog带有Positive/Negative按钮的按钮很容易。
new AlertDialog.Builder(getActivity())
.setTitle("Question?")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// User chose YES
}
})
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// User chose NO
}
}).create().show();
Run Code Online (Sandbox Code Playgroud)
我想在我的TV App 中制作等价物。(向用户提问,得到 Yes/No 响应)
我发现了两件事,但都不能解决我的用例:
ErrorFragment(关闭,但只有 1 个按钮)
GuidedStepFragment(允许我有多个选项,但需要创建一个单独的 Activity,我必须编写自己的代码才能将选定的选项传递回第一个 Activity)
我觉得我错过了一些东西。这只是普通 Android 应用程序中的几行代码。
我尝试只AlertDialog在我的电视应用程序中使用,但它会引发Theme关于在应用程序上设置不正确的错误。另外,我认为这些对话框无论如何都不是可访问性友好的。
我创建了一个带有单选组、单选按钮和编辑文本的自定义警报对话框。
目标是尝试从选定的单选按钮和编辑文本中获取文本值。此时,我只能获取edittext中输入的值。
我已经看到了下面的链接,并尝试调整代码以适应,但似乎代码仍然不起作用。
http://www.mkyong.com/android/android-radio-buttons-example/
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/radioPersonGroup"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RadioButton
android:id="@+id/gButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="G" />
<RadioButton
android:id="@+id/kButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="K" />
</RadioGroup>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:ems="10"
android:hint="$10.00"
android:inputType="numberDecimal" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
java文件
private RadioButton radioSelectedButton;
...
FloatingActionButton fab = findViewById(R.id.fab);
final RadioGroup group = findViewById(R.id.radioPersonGroup);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final …Run Code Online (Sandbox Code Playgroud) android android-alertdialog android-radiogroup android-radiobutton
阅读MaterialComponents 主题警报对话框按钮和https://medium.com/@lcdsmao/material-design-custom-alert-dialog-5a9cab3ade11我设置AlertDialog了新材料主题的按钮和文本颜色。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- AlertDialog -->
<item name="materialAlertDialogBodyTextStyle">@style/MaterialAlertDialogTextTheme</item>
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogButtonsTheme</item>
</style>
<!-- AlertDialog text -->
<style name="MaterialAlertDialogTextTheme" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
<item name="android:textColor">@color/colorPrimary</item>
<item name="android:colorAccent">@color/colorPrimary</item>
<item name="colorAccent">@color/colorPrimaryitem>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
</style>
<!-- AlertDialog buttons -->
<style name="MaterialAlertDialogButtonsTheme" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="buttonBarPositiveButtonStyle">@style/AlertDialog.Button</item>
...
Run Code Online (Sandbox Code Playgroud)
创建AlertDialogFragment使用后
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
super.onCreateDialog(savedInstanceState)
return MaterialAlertDialogBuilder(context!!).apply {
...
}.create()
} …Run Code Online (Sandbox Code Playgroud) android android-alertdialog material-design material-components material-components-android
这是我的自定义对话框的代码:
public class DialogBrightness extends AppCompatDialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.layout_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
/*Build and create the dialog here*/
}
}
Run Code Online (Sandbox Code Playgroud)
我按照其他答案的说明首先创建了这个称为 dialog_bg 的可绘制 xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="#fff5ee"/>
<corners
android:radius="30dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
然后将其设置为 layout_dialog xml 的背景:
android:background="@drawable/dialog_bg"
Run Code Online (Sandbox Code Playgroud)
但我无法完成将对话框的根视图设置为透明的最后一步:
dialogBrightness.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)
因为没有 getWindow() 函数。
另外,当他们说 root view 时,他们的意思是我在上面的 inflate 函数中设置为 null 的那个吗?
java android android-alertdialog android-dialogfragment material-components-android
android ×10
java ×3
material-components-android ×2
dialog ×1
kotlin ×1
leanback ×1
popupwindow ×1