我正在创建一个自定义对话框:
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>
我希望按钮出现在对话框的底部中心(从底部开始50dip填充),但它出现在对话框的左上角。
这是因为LinearLayout不知道对话框的宽度/高度,这是我在样式xml文件中使用的背景图像的大小。
问题:如何知道对话框的宽度高度,以便LinearLayout与对话框大小相同?
答案 0 :(得分:1)
以下是如何执行此操作的方法:
<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>
答案 1 :(得分:0)
将android:layout_gravity="bottom|center_horizontal"
更改为android:gravity="bottom|center_horizontal"
。
android:layout_gravity
是布局本身的重力w.r.t.它的父母。 android:gravity
适用于其内容。
答案 2 :(得分:0)
我遇到了同样的问题,我最终使用的是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>
答案 3 :(得分:0)
好的,我找到了一种方法,而不是干净的方式,但有效。
您需要在style.xml文件中添加背景
<item name="android:windowBackground">@drawable/levelselectbg</item>
还有你的linearlayout:
android:background="@drawable/levelselectbg"
需要第一个背景来保持对话框无边框(我在我的问题中的style.xml中指定)并且需要线性布局背景来给布局赋予大小,现在它知道它的尺寸并将按钮放在底部中心有衬垫。
希望这有助于某人,如果有更好的解决方案,请分享。