1

我正在尝试在屏幕上显示一个自定义的 DialogFragment 刷新,宽度为 wrap_content。我已经差不多了,但不完全。

在此处输入图像描述

请注意,对话框的右侧超出了内容的宽度。我在主要内容区域的背面添加了红色以区分两者。这使我相信主要内容区域实际上位于另一个我无法到达的最小宽度的层上。在 DialogFragment 的 onResume() 中,如果我调用...

    Resources r = getActivity().getResources();
    int pixels = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 72, r.getDisplayMetrics());
    LayoutParams params = getDialog().getWindow().getAttributes();
    params.width = pixels;
    params.x = 0;
    getDialog().getWindow().setAttributes(params);

...这会将宽度调整为适当的大小,但我担心由于像素差异,这在所有设备上都不会正确。注意我正在根据显示指标转换 72,但我不确定为什么 72 是正确的宽度,因为我提供的最小图标版本是 drawable-mdip 文件夹中的 48x48px。72x72px 位于 drawable-hdip 文件夹中,我假设它特定于我正在使用的设备......因此其他设备可能需要将此值设置为 48、96、144 等,具体取决于显示指标。

所以我的问题是:为什么这个对话框的右侧被扩展了?如何在不以编程方式将窗口缩小静态值(即 72)的情况下摆脱它?

...这是自定义对话框 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="5dip"
    android:background="@color/red"
    android:orientation="vertical" >

    <ImageButton 
        android:id="@+id/sharing_dialog_button_facebook"
        android:contentDescription="@string/facebook_option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/facebook_icon"/>

    <ImageButton 
        android:id="@+id/sharing_dialog_button_twitter"
        android:contentDescription="@string/twitter_option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/twitter_icon"/>

    <ImageButton 
        android:id="@+id/sharing_dialog_button_tumblr"
        android:contentDescription="@string/tumblr_option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/tumblr_icon"/>

    <ImageButton 
        android:id="@+id/sharing_dialog_button_foursquare"
        android:contentDescription="@string/foursquare_option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/foursquare_icon"/>

    <ImageButton 
        android:id="@+id/sharing_dialog_button_email"
        android:contentDescription="@string/email_option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/mail_icon"/>

</LinearLayout>
4

1 回答 1

0

我遇到了类似的问题,只是我的对话框有时太小,并且希望它填满大部分屏幕。我通过设置内容的 minWidth 来解决它:

Window window = getDialog().getWindow();
FrameLayout content = (FrameLayout) window.findViewById(android.R.id.content);

// Make the popup fill at least 4/5 of the screen's width
int minWidth = width*4/5;
content.setMinimumWidth(minWidth);

我不太记得为什么,但是在我的代码中,之后我重新检查了窗口宽度并手动将其设置为窗口。可能setMinimumWidth并不总是有效。所以我这样做了:

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(window.getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(lp);

注意:可能需要延迟后面的代码,直到内容被绘制出来。

于 2014-08-30T06:54:29.423 回答