在Android中创build一个自定义对话框

我正在尝试在Android中创build一个自定义对话框。 但是无论我尝试做什么,我都无法改变对话框的宽度。 它仍然是一样的。 以下是我设置为对话框内容的视图。

<RelativeLayout android:id="@+id/current_stats" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible"> <ImageView android:id="@+id/player_image" android:src="@drawable/person" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true"/> <TextView android:id="@+id/player_name" android:layout_below="@id/player_image" android:layout_centerHorizontal="true" android:text="Raja Ram" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageButton android:id="@+id/dialog_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:background="#00000000" android:src="@drawable/close_button_selector"/> <ImageButton android:id="@+id/dialog_flip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:background="#00000000" android:src="@drawable/rotate"/> </RelativeLayout> 

正如你所看到的,我在这个代码示例中使用了wrap_content。 另外我尝试了以下选项

1)在创build对话框时设置自定义样式。

 dialog = new Dialog(this,R.style.Theme_Dialog); 

风格如下

 <resources> <style name="Theme" parent="android:Theme"> </style> <style name="Theme.Dialog"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> </style> </resources> 

2)像这样在onCreateDialog()中设置视图的参数

 LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.player_info, null, false); ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); dialog.setContentView(v,p); 

3)我也尝试在onCreateDialog()方法中设置Window参数

 WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); params.width=WindowManager.LayoutParams.WRAP_CONTENT; dialog.getWindow().setAttributes(params); 

但是再次没有运气。 有人可以帮我解决这个问题。 难道我做错了什么?? 也可以请教我如何设置对话窗口的x和y位置?

谢谢

Solutions Collecting From Web of "在Android中创build一个自定义对话框"

  dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar); dialog.setContentView(R.layout.custom_dialog); LayoutParams lp=dialog.getWindow().getAttributes(); lp.x=100;lp.y=100;lp.width=100;lp.height=200;lp.gravity=Gravity.TOP | Gravity.LEFT; lp.dimAmount=0; lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; // dialog.getWindow().setAttributes(lp); dialog.show(); 

这对我来说很好。

是你的问题,它需要整个屏幕的宽度,或者你无法控制它占多大的屏幕?

为了让你的活动像一个对话框一样,而不是占满你应该设置你的活动在清单中有对话框主题:

 <activity android:theme="@android:style/Theme.Dialog"> 

该对话框将会像您的布局所需的一样大。 如果你希望它变宽,你需要扩大你的布局。 (调整图像大小,添加填充等)。

我不知道有一种方法来定位对话窗口..我认为它总是居中,我可能是错的。

经过很长时间,我发现了这个问题。 问题是我用相对布局的方式。 我想我没有正确指定相对位置。 当我改变线性布局,它工作正常。 它没有使用整个屏幕,但只有任何需要。

我可以使用getWindow()来改变对话框的宽度,高度和位置。setAttributes(params)

在自定义对话框类的onCreate()方法中执行下一步

 @Override protected void onCreate(Bundle savedInstanceState) { getWindow().setLayout(x, y); }