【问题标题】:Dialog Layout doesn't show as it should对话框布局未按应有的方式显示
【发布时间】:2011-02-14 11:30:32
【问题描述】:

我使用一个 XML 文件来定义一个显示给用户的对话框。 我希望能够滚动 TextViews 和 EditTexts 但始终显示 OK 和 Cancel 按钮。我没办法做到这一点。 这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

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

            <!-- Group Name -->
            <TextView android:id="@+id/group_name_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" 
                android:layout_marginRight="20dip"
                android:text="@string/group_name_view_text" 
                android:gravity="left"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <EditText android:id="@+id/group_name_edit"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:scrollHorizontally="true" 
                android:autoText="false"
                android:capitalize="none" 
                android:gravity="fill_horizontal"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <!-- Group Description -->
            <TextView android:id="@+id/group_description_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:text="@string/group_description_view_text" 
                android:gravity="left"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <EditText android:id="@+id/group_description_edit"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:scrollHorizontally="true" 
                android:autoText="false"
                android:capitalize="none" 
                android:gravity="fill_horizontal"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <!-- Access security -->

            <TextView android:id="@+id/access_security_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:text="@string/access_security_view_text" 
                android:gravity="left"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <Spinner android:id="@+id/access_spinner"
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:gravity="fill_horizontal" 
                android:drawSelectorOnTop="true"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <!-- Communications security -->
            <TextView android:id="@+id/communcations_security_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:text="@string/communcations_security_view_text"
                android:gravity="left" 
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <Spinner android:id="@+id/communications_spinner"
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:gravity="fill_horizontal" 
                android:drawSelectorOnTop="true"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <!-- User -->
            <TextView android:id="@+id/username_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:text="@string/username_view_text" 
                android:gravity="left"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <EditText android:id="@+id/username_edit" 
               android:enabled="false"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:scrollHorizontally="true" 
                android:autoText="false"
                android:capitalize="none" 
                android:gravity="fill_horizontal"
                android:textAppearance="?android:attr/textAppearanceMedium" />
            <!-- Password -->
            <TextView android:id="@+id/password_view"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:text="@string/password_view_text" 
                android:gravity="left"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <EditText android:id="@+id/password_edit" 
            android:enabled="false"
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent"
                android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
                android:scrollHorizontally="true" 
                android:autoText="false"
                android:capitalize="none" 
                android:gravity="fill_horizontal"
                android:password="true" android:textAppearance="?android:attr/textAppearanceMedium" />

        </LinearLayout>
    </ScrollView>
    <LinearLayout android:layout_height="wrap_content"
        android:layout_width="fill_parent" >
        <Button android:layout_height="wrap_content"
                 android:layout_width="wrap_content" 
                 android:text="@string/ok_text"
                 android:layout_weight="1" android:id="@+id/group_creator_ok_button">
       </Button>
        <Button android:layout_height="wrap_content"
                 android:layout_width="wrap_content" 
                 android:text="@string/cancel_text"
                 android:layout_weight="1" 
                 android:id="@+id/group_creator_cancel_button">
       </Button>
    </LinearLayout>
</LinearLayout>

我已经扩展了 Dialog 类,所以当调用 onCreate 时我会调用

setContentView(R.layout.my_layout_file);

它只是向我展示了 ScrollView,而不是带有按钮的布局......所以我什至无法按下按钮。

【问题讨论】:

    标签: android dialog android-layout scrollview android-linearlayout


    【解决方案1】:

    只是像这样改变了你的 ScrollView 高度

    <ScrollView 
        android:layout_width="fill_parent" 
        android:layout_height="380dp">
    

    不用写了

    xmlns:android="http://schemas.android.com/apk/res/android"
    

    在每个标签上它只需要在第一个标签上

    【讨论】:

    • 这不是很独立的设备。如果屏幕是 1280 x 800 怎么办?
    • 您可以通过在运行时获取宽度和高度并相应地设置您的 ScrollView 高度来做到这一点
    【解决方案2】:

    你的滚动视图使用 wrap-content,所以如果内容比屏幕大,你的按钮自然不会显示。

    尝试使用 android:layout_weight 为您的布局元素分配“重要性”。

    您可以查看的另一种方法是使用&lt;merge&gt;-tag。

    然后你可以这样做:

    <merge>
    <ScrollView android:layout_height="fill_parent" ... >
     ...
    </ScrollView>
    
    <LinearLayout android:layout_height="wrap_content" android:layout_gravity="center|bottom" ...>
      <Button></Button>....
    <LinearLayout>
    
    </merge>
    

    【讨论】:

    • 合并很棒,但不幸的是,它在这里不起作用,因为视图被合并并且按钮覆盖了 EditText。尽管如此,玩权重还是不错的。
    【解决方案3】:

    您尚未指定内部 LinearLayout 的方向。你能检查一下吗?

    如果这不起作用,请尝试使用层次结构查看器。

    【讨论】:

    • 我不得不将内部 LinearLayout 的方向设置为“水平”,而将外部设置为“水平”
    猜你喜欢
    • 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
    相关资源
    最近更新 更多