如何在对话框中将关闭的图像视图放在右上角并留有边距?

Posted

技术标签:

【中文标题】如何在对话框中将关闭的图像视图放在右上角并留有边距?【英文标题】:How to put close imageview at top right corner with margin in a dialog? 【发布时间】:2015-03-19 16:37:26 【问题描述】:

我正在尝试将具有接近图像的图像视图放置在右上角,边缘稍有外部。这是我的对话框布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/acl_data_info_bg_round"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/close_dialog"
        android:layout_
        android:layout_
        android:layout_gravity="top|right"
        android:adjustViewBounds="true"
        android:paddingTop="-50dp"
        android:scaleType="fitStart"
        android:background="@drawable/freeg_logo"
        android:description="@null" />

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingRight="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Consumed: 0.5 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Limit: 10 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <Button
        android:id="@+id/button_hide_alertDialog"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="35.0dip"
        android:text="OK"
        android:textSize="15.0dip"
        android:textStyle="bold" />

    <Button
        android:id="@+id/textview_powered_by"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="25.0dip"
        android:background="@android:color/transparent"
        android:drawablePadding="5.0dip"
        android:drawableRight="@drawable/freeg_logo_acl_data_info"
        android:text="Powered by"
        android:textColor="#6d7780"
        android:textSize="10.0dip" />

</LinearLayout>

这是我膨胀它的代码:

alertDialog = new Dialog(context);

        alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        LayoutInflater inflater;

            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        View convertView = inflater.inflate(R.layout.acl_data_info_screen, null, false);

        Button button_hide_alertDialog = (Button) convertView
                .findViewById(R.id.button_hide_alertDialog);

        button_hide_alertDialog.setOnClickListener(new OnClickListener() 
        

            @Override
            public void onClick(View v)
            
                if(alertDialog != null && alertDialog.isShowing())
                    alertDialog.dismiss();
            
        );

        alertDialog.setContentView(convertView);

        // show it
        alertDialog.show();

我已经浏览了 *** 上所有可用的帖子,但没有一个能够解决我的问题。请帮我。提前致谢。

通过使用 android:layout_marginTop="-15dp",我得到以下输出:

【问题讨论】:

你能用当前输出截屏吗?可能会帮助我了解出了什么问题。而不是使用fill_parent,而是尝试使用match_parent。 fill_parent 是一个不推荐使用的方法,但它们都做同样的事情。 ***.com/questions/5761960/… 请看图 您需要使用父级FrameLayout 制作一个自定义布局,其中包含两个图像,其中一个图像将位于第一个图像之上并取消图像。 你能举个例子吗 @user1726619 有人发布了答案。所以我不需要发布相同的内容。所以检查答案是否有效。 【参考方案1】:

您可以使用 FrameLayout。

试试这个xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <LinearLayout
        android:layout_
        android:layout_
        android:background="@android:color/background_dark"
        android:orientation="vertical" >

        <!-- You Linear layout will go hewre without the close button -->

    </LinearLayout>

    <ImageView
        android:id="@+id/close_dialog"
        android:layout_
        android:layout_
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:description="@null"
        android:layout_gravity="top|right"
        android:layout_marginTop="-20dp"
        android:scaleType="fitStart" />

</FrameLayout>

希望对你有所帮助ツ

【讨论】:

在这里尝试不同的值android:layout_marginTop="-20dp"【参考方案2】:

这不起作用..对话框中的视图将留在对话框中,如果您尝试将带有负值的徽标拉出视图,它将消失在视图之外。

【讨论】:

那有什么解决办法? 人们声称可以解决这个问题。看看 ***.com/questions/24119039/… 那么您应该尝试在顶部添加一个 LinearLayout。让它透明。我将编辑我的答案给你一个例子。 我已经测试了给定的代码,结果都类似:i.imgur.com/12GH8qw.png。【参考方案3】:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@android:color/transparent"
android:orientation="vertical">

<LinearLayout
    android:layout_
    android:layout_
    android:background="@android:color/transparent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/close_dialog"
        android:layout_
        android:layout_
        android:layout_gravity="top|right"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:adjustViewBounds="true"
        android:background="@android:color/white"
        android:description="@null"
        android:scaleType="fitStart" />
</LinearLayout>

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="@android:color/white">

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingRight="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Consumed: 0.5 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Limit: 10 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <Button
        android:id="@+id/button_hide_alertDialog"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="35.0dip"
        android:text="OK"
        android:textSize="15.0dip"
        android:textStyle="bold" />

    <Button
        android:id="@+id/textview_powered_by"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="25.0dip"
        android:background="@android:color/transparent"
        android:drawablePadding="5.0dip"
        android:text="Powered by"
        android:textColor="#6d7780"
        android:textSize="10.0dip" />

</LinearLayout>
</LinearLayout>

只需在 ImageView 周围添加此 LinearLayout。所以不要删除任何东西,只需添加 LinearLayout。

编辑:

确保您的顶部布局也有 background="#android:color/transparent"。然后为其余内容使用另一个带有背景的 LinearLayout。

这应该可以解决问题。用您自己的@drawables 替换背景等。但是我用白色背景测试了它,这是想要的输出。

我的输出图片:

【讨论】:

我已经尝试过这个选项。这是我使用 android:layout_marginTop="-15dp" 得到的输出 请问您为什么使用负边距?您希望顶部图像的边缘有一个边距吗?请尝试使用更新后的代码。 我想在 imageview 的左上角稍外侧按下十字按钮。甚至您更新的代码也无法正常工作。 请试试这个。我在自己的项目中做了一些布局来查看它。这应该可以解决问题。 这不会导致对话框具有透明背景:)【参考方案4】:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
     >
<LinearLayout 
    android:layout_
    android:layout_
    android:layout_margin="25dp"
    android:layout_marginBottom="35dp"
        android:background="@drawable/acl_data_info_bg_round"
    android:orientation="vertical" >
     <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingRight="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Consumed: 0.5 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" 
        android:visibility="invisible"/>

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingRight="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Consumed: 0.5 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <TextView
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:paddingLeft="7.0dip"
        android:paddingTop="7.0dip"
        android:text="Free internet Limit: 10 MB"
        android:textColor="#6d7780"
        android:textSize="18.0dip" />

    <Button
        android:id="@+id/button_hide_alertDialog"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="35.0dip"
        android:text="OK"
        android:textSize="15.0dip"
        android:textStyle="bold" />

    <Button
        android:id="@+id/textview_powered_by"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="25.0dip"
        android:background="@android:color/transparent"
        android:drawablePadding="5.0dip"
        android:drawableRight="@drawable/freeg_logo_acl_data_info"
        android:text="Powered by"
        android:textColor="#6d7780"
        android:textSize="10.0dip" />

</LinearLayout>

<ImageView
    android:id="@+id/close_dialog"
    android:layout_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_gravity="top|right"
    android:adjustViewBounds="true"
    android:background="@drawable/icon"
    android:description="@null"
    android:scaleType="fitStart" />

</RelativeLayout>

试试这个吧

【讨论】:

【参考方案5】:

首先,定义一个风格

`<style name="deleteIcon">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginStart">-40dp</item>
<item name="android:layout_marginTop">3dp</item>
<item name="srcCompat">@drawable/ic_delete_icon</item>
</style>`

其次,在你的 LinearLayout 中使用这种风格

`<ImageView sytle="@style/deleteIcon" />`

【讨论】:

以上是关于如何在对话框中将关闭的图像视图放在右上角并留有边距?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中将imageButton设置为子视图(webview)的左上角

如何在android中将一个视图放在前面并让其他视图留在它后面?

如何删除 Android CheckBox 周围的填充

如何在输入标签中添加边距[重复]

如何在 Android Studio 中将文本设置为对应的图像

setCanceledOnTouchOutside的重新定位DialogFragment命中区域具有意外边距