簡體   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