动态更改高度约束布局

时间:2018-09-30 08:46:24

标签: java android

情况:

[x]列表项/切换标题

  • 子列表项
  • 子列表项

[]列表项/切换标题

如何根据第一个列表项的复选框动态地更改其高度?

(如果选中此复选框,则会打开一个子列表)

那我该如何通过编码更改约束布局的高度?

PS:我正在使用AndroidStudio 3.2

3 个答案:

答案 0 :(得分:1)

您不需要动态更改高度。只需将子列表放在如LinearLayout之类的ViewGroup中,并在复选框更改时在View.VISIBLEView.GONE之间切换可见性即可。

答案 1 :(得分:0)

您可以使用以下代码更改高度宽度 每个视图

private void changeIncludes (View newView ){
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
        // change width and height to 50
        params.height = 50 ;
        params.width = 50;
        newView.setLayoutParams(params);
    }

或从其他视图尺寸使用:

private void changeIncludes (View current , View newView ){
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
        params.height = current.getLayoutParams().height;
        params.width = current.getLayoutParams().width;
        newView.setLayoutParams(params);
    }

如果宽度或高度不变,则应刷新页面。

此代码对我有用,我希望对您也有用。

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    changeIncludes(buttonView,50,100);
                }else{
                    changeIncludes(buttonView,30,100);
                }
            }
        });

private void changeIncludes (View newView , int h , int w){
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
        // change width and height to 50
        params.height = h ;
        params.width = w;
        newView.setLayoutParams(params);
    }

我将此代码用于复选框,但是如果要用于列表项,则只需更改侦听器和接口。

答案 2 :(得分:0)

根据您使用的ViewGroup类型,您可以根据检查内容设置这些组的可见性。

例如,如果您使用的是ConstraintLayout,那么您会得到一个非常方便的android.support.constraint.Group。在这种情况下,

<android.support.constraint.Group
    android:id="@+id/group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:constraint_referenced_ids="sub_list_item_1,sub_list_item_2" />

然后,当您检测到复选框交互时,设置它的可见性(View.VisibleView.GONE)。

Group group1 = findViewById(R.id.group)
group1.setVisibility(View.GONE)