【问题标题】:Android custom dialog linearlayout size same as dialogs bg imageAndroid自定义对话框线性布局大小与对话框bg图像相同
【发布时间】:2011-09-02 06:38:21
【问题描述】:

我正在创建一个自定义对话框:

    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 不知道对话框的宽度/高度,也就是我在 style xml 文件中使用的背景图片的大小。

问题:如何知道对话框的宽高,使LinearLayout的大小和Dialog的大小一样?

【问题讨论】:

  • 为按钮设置 layout_gravity。

标签: android layout dialog size


【解决方案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>

【讨论】:

  • 它在底部以 50dip 填充但左对齐。
  • 确保将android:orientation="vertical" 添加到LinearLayout
  • 已添加。我正在使用您发布的确切代码。另一个问题是背景图像被拉伸以覆盖整个屏幕高度(我正在使用横​​向),尽管它小于屏幕尺寸。当我删除 标签 bg 图像大小正确显示。
【解决方案2】:

android:layout_gravity="bottom|center_horizontal" 更改为android:gravity="bottom|center_horizontal"

android:layout_gravity 是布局本身的重力 w.r.t.它的父母。 android:gravity 适用于其内容。

【讨论】:

  • 不,很遗憾,这不起作用。 Inazaruk 的回答成功了。
【解决方案3】:

我遇到了同样的问题,我最终使用了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>

【讨论】:

  • 你在使用自定义对话框吗?您在相对布局中指定了背景,而不是在您的样式 xml 中?当我将 bg 放入布局中时,我面临的主要问题是它的边框没有保持隐藏状态,我在我的样式 xml 文件中将其设置为 null。
  • 这个布局是通过指定layout_below属性来添加项目的,如果我只有一个按钮显示在底部,背景只有一个图像,它就不起作用了。
【解决方案4】:

好的,我找到了一种方法,不是一种干净的方法,而是有效的方法。

你需要在style.xml文件中添加背景

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

还有你的线性布局:

android:background="@drawable/levelselectbg"

需要第一个背景来保持对话框无边界(我在我的问题中的 style.xml 中指定)并且需要线性布局背景来为布局提供大小,现在它知道它的尺寸并将按钮放置在底部中间有填充。

希望这对某人有所帮助,如果有更好的解决方案,请分享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多