【问题标题】:Creating a custom dialog in Android在 Android 中创建自定义对话框
【发布时间】:2011-03-24 21:38:30
【问题描述】:

我正在尝试在 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 位置?

谢谢

【问题讨论】:

    标签: android dialog


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
              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
      • 在这个问题上花费了很多小时后,您的解决方案可以很好地解决它。谢谢
      • 谁能告诉我...那些 x,y,width 和 height 是 px,dp 还是 sp 格式?? tnx!
      • 使用 WindowManager.LayoutParams lp=.. 而不是 LayoutParams lp=.. 否则 x,y 等会出错
      【解决方案3】:

      我可以使用 getWindow().setAttributes(params) 更改对话框的宽度、高度和位置

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          你的问题是它占据了整个屏幕的宽度,还是你无法控制它占据了多少屏幕?

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

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

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

          我不知道定位对话框窗口的方法。我认为它总是居中,但我可能是错的。

          【讨论】:

          • 感谢您的回复。我的问题是我希望它更像一个弹出窗口。而不是用尽屏幕的整个宽度,我只希望它只消耗保持视图所需的宽度。而且我没有在该对话框中开始单独的活动。我有兴趣显示一个允许用户执行某些操作并且应该允许少量动画的窗口。我什至尝试过 PopupWindow,但由于某种原因,我的自定义动画无法与弹出窗口一起使用。希望我把我的要求说清楚。你有什么建议吗?
          • 以对话框为主题的活动看起来像一个弹出窗口。这个问题展示了它的样子:stackoverflow.com/questions/1967085/…
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-16
          • 2019-11-15
          相关资源
          最近更新 更多