我绝对是Android的初学者。现在我遇到了在Android中使用自定义视图设置默认AlertDialog宽度的问题。它没有调整警报对话框的宽度。我的代码出了什么问题?
这是我的提醒对话框的视图布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<android.support.v7.widget.AppCompatButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:textColor="@color/white"
app:backgroundTint="@color/green"
android:layout_gravity="center_horizontal"
android:id="@+id/btn_row_option_done"
android:text="Done"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<android.support.v7.widget.AppCompatButton
android:textColor="@color/white"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/lightBlue"
android:layout_gravity="center_horizontal"
android:text="Edit"
android:id="@+id/btn_row_option_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<android.support.v7.widget.AppCompatButton
android:textColor="@color/white"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/red"
android:layout_gravity="center_horizontal"
android:text="Delete"
android:id="@+id/btn_row_option_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<android.support.v7.widget.AppCompatButton
xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/white"
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
如您所见,我将linearLayout的宽度设置为wrap_content。
这就是我在Java代码中打开警告对话框的方法
public void showOptionDialog(final int id)
{
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
View view = layoutInflater.inflate(R.layout.row_option_dialog, null);
final AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
Boolean isTaskDone = dbHelper.isTaskDone(id);
Button doneBtn = (Button)view.findViewById(R.id.btn_row_option_done);
if(isTaskDone==false)
{
doneBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.markAsDone(id);
refreshListView();
alertDialog.cancel();
Toast.makeText(getActivity().getBaseContext(),"Marked as done",Toast.LENGTH_SHORT).show();
}
});
}
else{
ViewGroup viewGroup = (ViewGroup)doneBtn.getParent();
viewGroup.removeView(doneBtn);
}
Button editBtn = (Button)view.findViewById(R.id.btn_row_option_edit);
if(isTaskDone==false)
{
editBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity activity = (MainActivity) getActivity();
activity.replaceEditTaskFragment(id);
alertDialog.cancel();
}
});
}
else{
ViewGroup viewGroup = (ViewGroup)editBtn.getParent();
viewGroup.removeView(editBtn);
}
Button deleteBtn = (Button)view.findViewById(R.id.btn_row_option_delete);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.deleteTask(id);
items.remove(optionFocusedItemIndex);
adapter.notifyDataSetChanged();
Toast.makeText(getActivity().getBaseContext(),"Task deleted",Toast.LENGTH_SHORT).show();
alertDialog.cancel();
updateListEmptyText();
}
});
Button cancelBtn = (Button)view.findViewById(R.id.btn_row_option_cancel);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.cancel();
}
});
alertDialog.setView(view);
alertDialog.show();
}
但是当打开警告对话框时,其宽度不会调整大小,仍然显示默认大小,如屏幕截图所示。
这是截图。
正如你所看到的,即使我设置为wrap_content,宽度几乎已满屏幕。我也设置了类似300px的东西。它不起作用。我怎样才能做到这一点?
答案 0 :(得分:0)
首先为容器制作其他布局,然后在其内部使用换行内容进行此线性布局。之后,您可以使容器的alpha背景几乎为0,使其透明。内部布局中包含按钮的对话框。对于自定义对话框,您无法使用此AlertDialog,使您自己的活动行为就像一个对话框。
答案 1 :(得分:0)
在此设置所需的大小
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="300px"
android:layout_height="match_parent">......</LinearLayout>
或
alertDialog.show();
alertDialog.getWindow().setLayout(300, 300);
答案 2 :(得分:0)
更改此行
alertDialog.setView(view);
要
alertDialog.setContentView(view);
此处视图是自定义布局的实例。