如何重置或取消设置以编程方式设置的视图高度或宽度

时间:2017-02-04 21:45:20

标签: java android android-layout android-view

我正在努力解决这个问题,由于其通用关键字将结果导向不相关的问题,我找不到这个问题的直接答案。

如果我以编程方式设置视图的高度或宽度,例如:

((Button) findViewById(R.id.myButtonId)).getLayoutParams().height = 100;

如何设置/重置/恢复此过程,以便在设置该大小之前,视图的高度(或宽度)会恢复其默认行为?

我试图找到Html CSS相当于height: unsetheight: initial的内容,甚至是内联样式some_dom_element.removeAttribute("style")的JavaScript方式

有什么可以实现的吗?

3 个答案:

答案 0 :(得分:2)

要解决此问题,您应该在修改之前保存高度。然后,当您想要重置它时,您可以恢复到原始高度。幸运的是,MATCH_PARENTWRAP_CONTENT的特殊情况表示为整数常量,因此即使对于这些情况也是如此(对于研究这一点,可归功于OP)。

所以,解决方案是这样的:

int initial_height = view.getLayoutParams().height;

然后,当您想要将高度设置回其先前的值时,只需引用initial_height即可正确执行此操作。

答案 1 :(得分:1)

感谢nhouser9的想法和文档https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT我已经成功解决了这个问题。基本思路是一样的,保存初始值,以便可以在之后恢复,但首先需要确定视图高度或宽度是否具有固定或动态值以及它是动态值,所以对于我的情况我有使用了以下过程

int initial_height;
switch (view.getLayoutParams().height) {
    case LayoutParams.MATCH_PARENT:
        initial_height = LayoutParams.MATCH_PARENT;
        break;
    case LayoutParams.WRAP_CONTENT:
        initial_height = LayoutParams.WRAP_CONTENT;
        break;
    default:
        initial_height = view.getLayoutParams().height;
}

但是我理解动态大小(match_parentwrap_content)确实有特定的值,分别是-1和-2,根据文档,这意味着nhouser9建议直接起作用,因为这些动态尺寸可以直接从视图的尺寸获得(-1,-2,如果是固定尺寸则为正)。这意味着现在所需的只是直接保存初始大小,如此

int initial_height = view.getLayoutParams().height;

就是这样。这个答案留给了这里,以帮助任何人寻找相同的解决方案,我将等待其他用户发布他的答案,以便我可以选择他,因为这是他的帮助,让我找到了正确的解决方案。

答案 2 :(得分:0)

如果您想将高度重置为包裹内容:

 ViewGroup.LayoutParams llp = date.getLayoutParams();
                    llp.height= ViewGroup.LayoutParams.WRAP_CONTENT;
                    date.setLayoutParams(llp);