在Android中创建自定义对话框

时间:2010-08-03 18:38:23

标签: android dialog

我正在尝试在Android中创建自定义对话框。但无论我试图做什么,我都无法改变对话框的宽度。它只是保持不变。以下是我将设置为对话框内容的视图。

<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)在创建对话框时设置自定义样式。

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位置?

由于

5 个答案:

答案 0 :(得分:31)

        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();

这对我有用....

答案 1 :(得分:2)

您的问题是它占据了屏幕的整个宽度,还是您无法控制占用屏幕的数量?

要使您的活动充当对话框,而不是充分利用您应该将活动设置为在清单中包含对话框主题:

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

对话框将与布局所需的一样大。如果您希望它更宽,则需要使您的布局更宽。 (调整图像大小,添加填充等)。

我不知道如何定位对话框窗口..我认为它总是居中,但我可能错了。

答案 2 :(得分:1)

经过很长一段时间我才发现问题。问题在于我使用相对布局的方式。我想我没有正确指定相对位置。当我将其更改为线性布局时,它工作正常。它并没有耗尽整个屏幕,只是满足了所需要的一切。

答案 3 :(得分:0)

我可以使用getWindow()更改Dialog的宽度,高度和位置.setAttributes(params)

答案 4 :(得分:-3)

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

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