【问题标题】:Android. How to make dialog buttons appear a bit outside the dialog安卓。如何使对话框按钮出现在对话框之外
【发布时间】:2012-01-16 14:37:06
【问题描述】:

我需要一个对话框(它是一个游戏对话框),其中按钮位于对话框的下角。不在对话框内部,而是在角落(即按钮的一部分将位于对话框上方,而部分将在对话框外部)。

【问题讨论】:

  • 您在为您的对话框使用 AlertDialog.Builder 吗?
  • 我尝试了构建器和布局。我对机制没有限制。我会使用任何能帮助我达到理想外观的方法

标签: java android user-interface


【解决方案1】:

首先,据我所知,您不能将布局子级移到其父级之外。

我从来没有尝试过你想要的东西,但我认为它可以做到。诀窍是使用带有对话主题的活动(您可以在开发人员网站或 API 演示中找到这些示例)。确保布局的根节点的宽度和高度设置为 wrap_content。您的根布局应该是 RelativeLayout 并且没有背景 (android:background="#0000")。

接下来,将另一个布局添加到您的根节点(FrameLayout 可能会工作),并使用自定义可绘制作为背景(或使用框架中默认对话框使用的),并将宽度和高度设置为 fill_parent 或 match_parent。将 android:padding 设置为从对话框边缘拉入背景的倾角值。

剩下要做的就是将其他布局元素添加到根节点。 FrameLayout 将绘制在其他所有内容的下方,并且填充会产生不包含您的 UI 的边框错觉。

更新 哎呀,刚刚尝试了上面的结果有好有坏。首先,您肯定想看看 API 演示中的“自定义对话框”示例,它使用了:

创建一个使用上述 xml 布局文件的活动,并将活动的样式设置为您在 xml/styles.xml 中定义的 Theme.CustomDialog。这将为您的活动提供红色背景。然后,您可以编辑 fill_box 形状文件以仅将一个背景属性设置为不可见(“#0000”)。结果应该是一个没有背景的对话框形活动。

接下来,我尝试使用上面的想法破解背景。这个想法应该是在其他不包含它们的 UI 元素后面绘制了一个虚假的背景,因此可以使用 layout_margin 将其“缩小”而不会影响它们。这里的问题是假背景需要将宽度和高度设置为相对于其他 UI 元素,所以它有点必须包含它们,所以它可以正确地测量自己相对于它们的宽度和高度。

所以我认为解决方案可能是执行我上面所说的大部分内容,除了不要尝试虚假背景。只需为您的根布局背景使用 9-patch 可绘制对象,并缩小背景边缘以绘制比内容更远的位置。您仍然可以将上面的自定义主题内容与不可见的窗口主题一起使用。

【讨论】:

    【解决方案2】:

    这是我尝试过的示例布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
     >
    <FrameLayout
    android:orientation="vertical"
    android:id="@+id/ll1" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/dialog_frame">
    </FrameLayout>
    <Button android:layout_width="wrap_content"
     android:id="@+id/button1" 
     android:layout_height="wrap_content"
     android:layout_marginTop="35dp"
     android:layout_centerHorizontal="true"
      android:text="Button"></Button>
    </RelativeLayout>
    

    这里是截图:

    希望你得到提示,祝你好运

    【讨论】:

    • 试过了,工作正常,除了我得到了包含上面所有内容的对话框边框。我使用了来自this topic 的提示来解决这个问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多