我正在尝试创建自定义对话框
基本布局(我也尝试了各种修改过的布局)
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@color/dialogHeaderBackground"
android:gravity="center"
android:minHeight="@dimen/minHeightDialogTitle"
android:text=""
android:textStyle="bold" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/title"
android:layout_marginTop="5dp"
android:text="" />
<LinearLayout
android:id="@+id/loutButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@+id/message"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<Button
android:id="@+id/btnNeutral"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
<Button
android:id="@+id/btnNegative"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
<Button
android:id="@+id/btnPositive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
</LinearLayout>
</RelativeLayout>
Java代码
Dialog dialog = new Dialog(this);
// Dialog dialog = new Dialog(this,R.style.Theme_Dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
Button btnPositive=(Button) dialog.findViewById(R.id.btnPositive);
Button btnNegative=(Button) dialog.findViewById(R.id.btnNegative);
Button btnNeutral=(Button) dialog.findViewById(R.id.btnNeutral);
TextView txvTitle=(TextView)dialog.findViewById(R.id.title);
TextView txvMessage=(TextView)dialog.findViewById(R.id.message);
...
so on and so forth
我得到了以下对话框,这是全屏,我不想要
已尝试的解决方案,其结果与上面的截图相同
MATCH_PARENT
高度。如此Stack溢出answer WRAP_CONTENT
以进行对话Implemented Java Code in Pastebin RelativeLayout
保留在父LinearLayout
内,请参阅answer 我唯一可以获得体面对话的时候是指定xml布局的高度,例如android:layout_height="150dp"
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="150dp" >
指定固定高度时的对话框,
答案 0 :(得分:6)
从线性布局中删除android:layout_alignParentBottom="true"
行
答案 1 :(得分:3)
<LinearLayout
android:id="@+id/loutButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@+id/message"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
从上面的代码中删除android:layout_alignParentBottom="true"
并检查。
答案 2 :(得分:1)
雅,它发生在relativelayout。 在其谷歌docs中明确提到。
请注意,您不能在大小之间具有循环依赖关系 RelativeLayout及其子女的位置。例如,你 不能将RelativeLayout的高度设置为WRAP_CONTENT和a 子项设置为ALIGN_PARENT_BOTTOM
当您使用对话框时,您必须根据您的要求使用linearlayout。 它会挑衅地为你工作。
进一步的想法可能不适合您,但我只是提及它以供参考
你可以使用java代码进行make fix size对话框, 或者您可以从布局参数设置布局边距,以便您可以保持不同屏幕大小的响应能力。 你也可以做一件事, 获得屏幕大小
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
比您可以计算新的对话框大小并将其设置为@ guobao的答案
DisplayMetrics displayMetrics = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (new width);
params.height = (new height);
问我是否需要进一步的说明。
答案 3 :(得分:0)
您可以在对话框中设置此代码
DisplayMetrics displayMetrics = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (the width you want to set);
params.height = (the height you want to set);
答案 4 :(得分:0)
当我遇到同样的问题时,这是我的方法。
我扩展了DialogFragment(来自support.v4 lib)
然后膨胀:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_whatever, null);
builder.setView(view);
return builder.create();
}
这是布局:
<?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="wrap_content"
android:background="@drawable/rounded_corners"
android:padding="20dp">
<TextView
android:id="@+id/confirm_dialog_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="@color/black"
android:text="@string/are_you_sure_declining_whatever"/>
<LinearLayout
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"
android:orientation="horizontal">
<Button
android:id="@+id/cancel_action"
android:layout_marginRight="10dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:text="@string/cancel"
android:textColor="@color/accent_color"/>
<Button
android:id="@+id/confirm_action"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:textColor="@color/accent_color"
android:text="@string/reject"/>
</LinearLayout>
</LinearLayout>
这种方法也遵循材料设计准则!!
希望这对你有所帮助
致以最诚挚的问候,
pedrovic90