【发布时间】:2021-11-23 06:42:11
【问题描述】:
我目前正在修改已由某人完成的 Android 应用程序。我需要修改此应用程序的列表视图中可见的虚线下方的现有居中对齐弹出对话框,如下所示。
我尝试了一些不同的方法来让这个弹出对话框与那些虚线对齐,但都没有奏效。
WindowManager.LayoutParams param = dialog.getWindow().getAttributes();
param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
param.y = y;
dialog.getWindow().setAttributes(param); // param.x and param.y also not working
我附上了我的预期和实际结果,以及下面的所有相关代码。
dialog_options_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/option_download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minWidth="200dp"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="18dp">
<ImageView
android:id="@+id/ivDownload"
android:layout_width="24dp"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_download" />
<TextView
android:id="@+id/tvDownload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:text="@string/download_lowercase"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/light_grey" />
<LinearLayout
android:id="@+id/option_like"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minWidth="200dp"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="18dp">
<ImageView
android:id="@+id/ivLike"
android:layout_width="24dp"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_like" />
<TextView
android:id="@+id/tvLike"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:text="@string/add_favorites"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/light_grey" />
<LinearLayout
android:id="@+id/option_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minWidth="200dp"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="18dp">
<ImageView
android:id="@+id/ivShare"
android:layout_width="24dp"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_share" />
<TextView
android:id="@+id/tvShare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:text="@string/share_dialog_text"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
DialogHelper.java
public static void showEpisodeOptionsDialog(Context context, boolean shouldBeDownloaded, boolean isDownloading, boolean isFavorite, int y, OnEpisodeOptionsMenuItemClickListener clickListener){
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.dialog_options_menu);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
WindowManager.LayoutParams param = dialog.getWindow().getAttributes();
param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
param.y = y;
dialog.getWindow().setAttributes(param);
TextView tvDownload = (TextView) dialog.findViewById(R.id.tvDownload);
TextView tvLike = (TextView) dialog.findViewById(R.id.tvLike);
ImageView ivDownload = (ImageView) dialog.findViewById(R.id.ivDownload);
ImageView ivLike = (ImageView) dialog.findViewById(R.id.ivLike);
LinearLayout btnDownload = (LinearLayout) dialog.findViewById(R.id.option_download);
LinearLayout btnLike = (LinearLayout) dialog.findViewById(R.id.option_like);
LinearLayout btnShare = (LinearLayout) dialog.findViewById(R.id.option_share);
String downloadText, likeText;
int selectedColor = ContextCompat.getColor(context, R.color.option_selected_orange);
int defaultColor = ContextCompat.getColor(context, R.color.black);
if (shouldBeDownloaded) {
if (isDownloading) {
downloadText = context.getString(R.string.downloading_lowercase);
} else {
downloadText = context.getString(R.string.remove_download);
}
ivDownload.setImageResource(R.drawable.ic_bin);
tvDownload.setTextColor(selectedColor);
} else {
downloadText = context.getString(R.string.download_lowercase);
ImageViewCompat.setImageTintList(ivDownload, ColorStateList.valueOf(defaultColor));
tvDownload.setTextColor(defaultColor);
}
if (isFavorite) {
likeText = context.getString(R.string.remove_favorites);
ImageViewCompat.setImageTintList(ivLike, ColorStateList.valueOf(selectedColor));
tvLike.setTextColor(selectedColor);
} else {
likeText = context.getString(R.string.add_favorites);
ImageViewCompat.setImageTintList(ivLike, ColorStateList.valueOf(defaultColor));
tvLike.setTextColor(defaultColor);
}
tvDownload.setText(downloadText);
tvLike.setText(likeText);
btnDownload.setOnClickListener(v -> {
dialog.dismiss();
clickListener.onDownloadClicked();
});
btnLike.setOnClickListener(v -> {
dialog.dismiss();
clickListener.onLikeClicked();
});
btnShare.setOnClickListener(v -> {
dialog.dismiss();
clickListener.onShareClicked();
});
dialog.show();
}
请告诉我这个弹出对话框如何与这些虚线对齐。
【问题讨论】: