1

カスタム DialogFragment フラッシュを画面左に、wrap_content 幅で表示しようとしています。私はほとんどそこにいますが、完全ではありません。

ここに画像の説明を入力

ダイアログの右側がコンテンツの幅を超えて拡張されていることに注意してください。2 つを区別するために、メイン コンテンツ エリアの背面に赤い色を追加しました。これにより、メイン コンテンツ エリアは実際には、私が到達できない最小幅を持つ別のレイヤーにあると考えるようになります。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 を変換していることに注意してください。ただし、提供した最小のアイコン バージョンは drawable-mdip フォルダーで 48x48px だったため、72 が適切な幅である理由がわかりませんでした。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 に答える