Размер линейного расположения пользовательских диалогов Android такой же, как и у диалогов bg image - PullRequest
2 голосов
/ 02 сентября 2011

Я создаю пользовательский диалог как:

    Dialog myDialog = new Dialog(context, R.style.Theme_Levels);
    myDialog.setContentView(R.layout.levelselector);
    myDialog.show();

Используемый стиль:

<style name="Theme.Levels" parent="@android:style/Theme.Dialog">
   <item name="android:windowFrame">@null</item>
   <item name="android:windowIsFloating">true</item>
   <item name="android:windowBackground">@drawable/dlgbg</item>
   <item name="android:windowContentOverlay">@null</item>
   <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
   <item name="android:windowNoTitle">true</item>
   <item name="android:backgroundDimEnabled">false</item>
</style>

Макет XML-файла:

<LinearLayout android:id="@+id/LevelSelector" 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="fill_parent" 
  android:layout_width="fill_parent" 
  android:layout_gravity="bottom|center_horizontal"
  android:paddingBottom="50dip"
  >     

    <Button android:text="Easy" 
        android:id="@+id/btn_Easy" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
    />
</LinearLayout>

Я хочу, чтобы кнопкапоявляются в нижней центральной части диалогового окна (50-градусный отступ снизу), но отображаются в левом верхнем углу диалогового окна.

Это потому, что LinearLayout не знает ширину / высоту диалога, которая является размером фонового изображения, которое я использовал в XML-файле стиля.

Вопрос: Как узнать ширинувысота диалога, чтобы LinearLayout был такого же размера, как и размер диалога?

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

Вот как вы можете это сделать:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/LevelSelector" 
  android:layout_height="fill_parent" 
  android:layout_width="fill_parent" 
  android:orientation="vertical"
  android:paddingBottom="50dip" >     

    <View
       android:layout_width="0dp" 
       android:layout_height="0dp" 
       android:layout_weight="1" />

    <Button android:text="Easy" 
        android:id="@+id/btn_Easy" 
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" />

</LinearLayout>
0 голосов
/ 04 сентября 2011

Хорошо, я нашел способ, не чистый, но работает.

Вам необходимо добавить фон в файл style.xml

   <item name="android:windowBackground">@drawable/levelselectbg</item> 

И также в вас linearlayout:

android:background="@drawable/levelselectbg"

Первый фон необходим для того, чтобы диалоговое окно оставалось без полей (что я указал в моем style.xml в моем вопросе), а фон linearlayout необходим для задания размера макета, теперь он знает его размеры.и помещает кнопку внизу по центру с отступом.

Надеюсь, это кому-нибудь поможет, если есть лучшее решение, поделитесь.

0 голосов
/ 02 сентября 2011

у меня была такая же проблема, в моем случае я использовал RelativeLayout

вот оно.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/body" android:layout_margin="20dip"    
android:layout_width="wrap_content" android:layout_height="wrap_content"    
android:background="@drawable/dialog_bg" 
>

<TextView android:id="@+id/message"     
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent" android:layout_height="wrap_content"      
    android:layout_margin="10dip" 
    android:inputType="textMultiLine"       
    android:textColor="@color/table_text"
    android:textScaleX=".95" android:textStyle="bold"       
/>
<TextView android:id="@+id/dummy" android:layout_below="@id/message" 
    android:layout_width="fill_parent" android:layout_height="60dip"        
    android:visibility="invisible" 
/>  
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_margin="10dip" android:layout_below="@id/message" 
    android:layout_centerHorizontal="true" android:orientation="horizontal"
>
    <ImageButton android:id="@+id/ok" 
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:background="@drawable/button_alert" android:src="@drawable/btn_yes"
        android:visibility="gone" android:layout_weight=".5"
    />  
    <ImageButton android:id="@+id/cancel" 
        android:layout_width="wrap_content" android:layout_height="wrap_content"    
        android:background="@drawable/button_alert" android:src="@drawable/btn_no"
        android:visibility="gone" android:layout_weight=".5"
    />
</LinearLayout>
</RelativeLayout>
0 голосов
/ 02 сентября 2011

Измените android:layout_gravity="bottom|center_horizontal" на android:gravity="bottom|center_horizontal".

android:layout_gravity - это сила тяжести самого макета в.р.т. его родитель. android:gravity относится к его содержанию.

...