单击按钮时 Android 布局高度未更新

标签 android layout

在布局中,我有一个按钮可以切换 View 的可见性(隐藏/显示线性布局)。在这个布局中,我还有一个微调器。当我单击按钮时,它会切换可见性,但不会将布局高度更改为 wrap_content,但当我更改微调器值时,它会更新高度。

这是 XML 布局代码

 <LinearLayout
    android:id="@+id/layoutA1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tvAlarmHeading"
    android:layout_margin="5dip"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/transparent_border"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/layoutA1C1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Spinner
                android:id="@+id/spnParameterA1C1"
                android:layout_width="140dp"
                android:layout_height="wrap_content"
                android:textSize="20sp" />



        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnAddA1C1"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_gravity="center"
                android:background="@drawable/button_pattern"
                android:text="+"
                android:textSize="22sp" />

        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutA1C2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Spinner
                android:id="@+id/spnConditionA1"
                android:layout_width="70dp"
                android:layout_height="wrap_content"
                android:textSize="18sp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnRemoveA1C2"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_gravity="center"
                android:background="@drawable/button_pattern"
                android:text="-"
                android:textSize="22sp" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

这是我切换 View 可见性的 Activity 代码

//Set the on item selected listener on the parameter spinner for alarm1 condition 1 
spnParameterA1C1.setOnItemSelectedListener(new OnItemSelectedListener()
{
    @Override
    public void onItemSelected(AdapterView<?> parent, View view,int position, long id)
    {
        tvUnitA1C1.setText(unitList.get(position));
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent){}

});

//Set onClickListener for add condition button for Alarm 1
btnAddA1C1.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v)
    {
        layoutA1C2.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
        layoutA1C2.setVisibility(android.view.View.VISIBLE);
        btnAddA1C1.setVisibility(android.view.View.INVISIBLE);
        layoutA1.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
    }
});

//Set onClickListener for add condition button for Alarm 1
btnRemoveA1C2.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v)
    {
        layoutA1C2.getLayoutParams().height = 0;
        btnAddA1C1.setVisibility(android.view.View.VISIBLE);
        layoutA1C2.setVisibility(android.view.View.INVISIBLE);
        layoutA1.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
    }
});

我也尝试过 layoutA1.refreshDrawableState();。谁能告诉我应该调用哪个方法来刷新布局长度?

最佳答案

您需要重新设置布局参数以刷新 View 。

尝试:

LayoutParams params = layoutA1C2.getLayoutParams();
params.height = LayoutParams.WRAP_CONTENT;
layoutA1C2.setLayoutParams(params); // this call is what you need to add

关于单击按钮时 Android 布局高度未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24430698/

相关文章:

layout - KDE : how do i find and switch current global keyboard layout from CLI?

Android Preferences自定义布局编辑

android - 使用 Contact id 获取 RawContact id

android - RecyclerView 元素更新 + 异步网络调用

android - 如何在 Activity 之间传递书的数组列表

swift - 编辑-如何让 UIlabel 进入容器中间?

css - 固定位置在不同的浏览器中不行,如何在Ext.Panel中制作一个带有列的表格?

php - 以安全的方式调用 php 页面

java - 从自定义 View 到 Activity 进行通信

layout - jQuery Mobile - 在三列 ui-grid 布局中跨两列的输入字段?