如何重置或取消设置以编程方式设置的视图高度或宽度
How to reset or unset a view height or width which were set programmatically
我正在努力解决这个问题,由于它的通用关键字将结果引向不相关的问题,我找不到这个问题的直接答案。
如果我以编程方式设置视图的高度或宽度,例如:
((Button) findViewById(R.id.myButtonId)).getLayoutParams().height = 100;
如何unset/reset/revert此过程,以便视图的高度(或宽度)returns 达到设置该尺寸之前的默认行为?
我正在尝试找到类似于 Html CSS
等同于 height: unset
或 height: initial
甚至 JavaScript 内联样式的方法 some_dom_element.removeAttribute("style")
有什么办法可以做到这一点吗?
感谢 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_parent
、wrap_content
) 确实有特定的值,根据文档,分别为 -1 和 -2,这意味着 nhouser9 的建议直接起作用,因为这些动态大小可以直接从视图的维度(-1、-2 或如果固定大小则为正)获取。这意味着现在只需要直接保存初始大小,就像这样
int initial_height = view.getLayoutParams().height;
就是这样。这个答案留在这里是为了帮助任何寻找相同解决方案的人,我将等待其他用户 post 他的答案,这样我就可以选择他的答案,因为正是他的帮助让我找到了正确的解决方案。
要解决这个问题,你应该在修改之前保存高度。然后当你想重置它时,你可以恢复到原来的高度。幸运的是,MATCH_PARENT
和 WRAP_CONTENT
的特殊情况表示为整数常量,因此即使对于这些情况也适用(感谢 OP 研究这一点)。
所以,解决方案是这样的:
int initial_height = view.getLayoutParams().height;
然后当您想要将高度设置回之前的值时,只需参考 initial_height
即可正确执行此操作。
如果您想将高度重置为环绕内容:
ViewGroup.LayoutParams llp = date.getLayoutParams();
llp.height= ViewGroup.LayoutParams.WRAP_CONTENT;
date.setLayoutParams(llp);
我正在努力解决这个问题,由于它的通用关键字将结果引向不相关的问题,我找不到这个问题的直接答案。
如果我以编程方式设置视图的高度或宽度,例如:
((Button) findViewById(R.id.myButtonId)).getLayoutParams().height = 100;
如何unset/reset/revert此过程,以便视图的高度(或宽度)returns 达到设置该尺寸之前的默认行为?
我正在尝试找到类似于 Html CSS
等同于 height: unset
或 height: initial
甚至 JavaScript 内联样式的方法 some_dom_element.removeAttribute("style")
有什么办法可以做到这一点吗?
感谢 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_parent
、wrap_content
) 确实有特定的值,根据文档,分别为 -1 和 -2,这意味着 nhouser9 的建议直接起作用,因为这些动态大小可以直接从视图的维度(-1、-2 或如果固定大小则为正)获取。这意味着现在只需要直接保存初始大小,就像这样
int initial_height = view.getLayoutParams().height;
就是这样。这个答案留在这里是为了帮助任何寻找相同解决方案的人,我将等待其他用户 post 他的答案,这样我就可以选择他的答案,因为正是他的帮助让我找到了正确的解决方案。
要解决这个问题,你应该在修改之前保存高度。然后当你想重置它时,你可以恢复到原来的高度。幸运的是,MATCH_PARENT
和 WRAP_CONTENT
的特殊情况表示为整数常量,因此即使对于这些情况也适用(感谢 OP 研究这一点)。
所以,解决方案是这样的:
int initial_height = view.getLayoutParams().height;
然后当您想要将高度设置回之前的值时,只需参考 initial_height
即可正确执行此操作。
如果您想将高度重置为环绕内容:
ViewGroup.LayoutParams llp = date.getLayoutParams();
llp.height= ViewGroup.LayoutParams.WRAP_CONTENT;
date.setLayoutParams(llp);