2014-11-17 4 views
2

У меня есть DialogFragment с компоновкой xml, и мне нужно, чтобы это было, скажем, на 75% ширину экрана. Когда я ищу ответы, я всегда нахожу общий weight -решение, которое мне не помогает, так как мой фрагмент накладывает текущую активность, как показано ниже, и не принимает размер всего экрана. Я также не хочу использовать «ems» в качестве фиксированной ширины, поскольку я не могу знать размер экрана пользователя.Как установить ширину диалогового окна «Диалог» в процентах?

enter image description here

Есть ли способ (предпочтительно в XML), чтобы установить ширину корневых LinearLayout «S в указанный 75%? Я думаю, что это будет возможно обходным путем, чтобы определить целый набор LinearLayout с и сделать некоторые из них прозрачными, но это, кажется, довольно некрасиво решения ...

Если это помогает, вот макет фрагмента:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" 
    android:layout_height = "wrap_content" 
    android:layout_width = "match_parent" 
    android:orientation  = "vertical" > 

    <EditText 
     android:hint   = "@string/inputhint_feedbackName" 
     android:id    = "@+id/input_feedbackName" 
     android:imeOptions  = "actionNext" 
     android:inputType  = "textPersonName" 
     android:layout_height = "wrap_content" 
     android:layout_width = "match_parent" 
     android:lines   = "1" 
     android:maxLines  = "1" 
     android:singleLine  = "true" > 
     <requestFocus /> 
    </EditText> 

    <EditText 
     android:gravity    = "top" 
     android:id     = "@+id/input_feedbackMessage" 
     android:imeOptions   = "actionDone" 
     android:layout_height  = "wrap_content" 
     android:layout_marginBottom = "20dp" 
     android:layout_width  = "match_parent" 
     android:lines    = "10" 
     android:inputType   = "textMultiLine" /> 

    <Button 
     android:id     = "@+id/button_feedbackSend" 
     android:layout_height  = "wrap_content" 
     android:layout_width  = "match_parent" 
     android:text    = "@string/label_go" 
     android:textSize   = "16sp" 
     android:textStyle   = "bold" /> 
</LinearLayout> 

ответ

27

Я не думаю, что это можно достичь без использования кода.

В любом случае, я использую этот код внутри своего класса DialogFragment. Надеюсь, поможет.

public void onResume() { 
    super.onResume(); 

    Window window = getDialog().getWindow(); 
    Point size = new Point(); 

    Display display = window.getWindowManager().getDefaultDisplay(); 
    display.getSize(size); 

    int width = size.x; 

    window.setLayout((int) (width * 0.75), WindowManager.LayoutParams.WRAP_CONTENT); 
    window.setGravity(Gravity.CENTER); 
} 
Смежные вопросы