繁体   English   中英

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

[英]How to reset or unset a view height or width which were set programmatically

我正在为此苦苦挣扎,由于其通用关键字导致结果不相关,因此我无法找到该问题的直接答案。

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

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

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

我试图找到类似height: unsetHtml CSS等价物height: unsetheight: initial甚至内联样式的 JavaScript 方式some_dom_element.removeAttribute("style")

有什么办法可以做到这一点吗?

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

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

int initial_height = view.getLayoutParams().height;

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

感谢 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;

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

如果要将高度重置为 Wrap Content :

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM