1. 程式人生 > >程式碼動態設定間距,setMargins沒有作用,出現無效的情況。

程式碼動態設定間距,setMargins沒有作用,出現無效的情況。

我的問題:在程式碼中動態新增view ,然後設定margin 的時候,有時候會出現setMargin 無效的情況。

我這邊出現這個情況的原因是:

我的父控制元件是LinearLayout ,但是有些時候你在新建 LayoutParams 的時候,它使用的是RelativeLayout.LayoutParams。這個時候你通過LayoutParams .setMargin  就會出現不起作用的情況。所以大家可以檢查一下看看是不是這個原因,寫程式碼要注意一下。

之前網上查資料的時候,有這樣一些的情況,也給大家列一下:

資料 出處:https://blog.csdn.net/lebsharing/article/details/53413884

一、在4.0以下的系統中給FrameLayout的子view設定margin失效

 失效原因失效原因應該是4.0及以上Framelayout的預設的layout_gravity設定好了"top|left"或有類似邏輯,而4.0以下則沒有,所以才會失效。

解決方案:

1、在佈局中給View設定,加入android:layout_gravity="top|left",

2、在程式碼中解決margin失效問題。

FrameLayout.LayoutParams p = 

new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

p.gravity = Gravity.TOP;

view.setLayoutParams(p)

二、在RelativeLayout 中設定某些情況下的子view,android:layout_marginBottom無效。

如:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView 
        android:id="@+id/avatar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"/>
</RelativeLayout>
這樣設定,在部分裝置上marginBottom無效。

原因:在這個view的下面已經沒有子view,marin_bottom沒有相對控制元件。

解決方案:在ImageView下面加一個view就可以,改view的寬高可以設定為0。這樣就解決了問題。如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView 
        android:id="@+id/avatar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"/>
   
    <View 
	android:layout_width="0px"
	android:layout_height="0px"
	android:layout_below="@id/avatar"/>
</RelativeLayout>


相關推薦

程式碼動態設定間距setMargins沒有作用出現無效情況

我的問題:在程式碼中動態新增view ,然後設定margin 的時候,有時候會出現setMargin 無效的情況。我這邊出現這個情況的原因是:我的父控制元件是LinearLayout ,但是有些時候你在新建 LayoutParams 的時候,它使用的是RelativeLayo

c++builder上使用TIDTCPServer和TIDTCPClient進行簡單通訊如何通過程式碼動態設定TIDTCPServer的Bindings屬性

 這兩天老大讓我實現一個簡單功能就是通過程式碼動態設定TIDTCPServer的Bindings屬性,剛開始我覺得這個問題So Easy,但是做著做著總是出現同樣一個錯誤不知道為什,這個問題一直糾結了我兩天時間終於在今天早上得以解決,在此同大家分享一下在這個過程中我是如何解

Safari瀏覽器對設定的高度不起作用解決方案

發現 文字 one 底部對齊 設定 pan select標簽 pro prop 1、在做瀏覽器兼容的時候,發現select標簽在safari蘋果瀏覽器中的高度永遠都是默認的,這時候解決的辦法是加上line-height屬性就可以設置;2、但加上line-height屬性可以

LinearLayout, RelativeLayout,程式碼(動態)設定佈局位置(線性佈局,相對佈局)

有些時候我們需要動態的設定-某些佈局的位置,(也是程式碼適配) 一:父佈局是,線性佈局: xml檔案如下 <LinearLayout android:layout_width="wrap_content"

Android程式碼動態設定字型大小

//給一個id為name的TextView設定字型大小  TextView mName = (TextView)findViewById(R.id.name);  mName.setTextSize(22);  開始學Android的時候,設定字型大小,無非用上面的程

Codeblocks寫程式碼視窗的工作列都沒有只剩下程式碼mini介面

在用codeblocks寫程式碼的時候,手一滑成了這個樣子,啥視窗都沒有了,吃了一鯨。 解決方法:在視圖裡邊,選擇窗口布局,上圖是mini狀態,也就是隻顯示程式碼介面,別的都沒了,改成defu

android開發步步為營之102:通過xml設定或者程式碼動態設定windowSoftInputMode

        windowSoftInputMode這個Activity屬性,經常會用到了,用來設定鍵盤的彈出與否,因為鍵盤的彈出會影響整個頁面的佈局的。最近專案裡,有個需求,編輯圖片上面一個標題

程式碼動態設定ProgressBar進度條樣式

1、設定水平顯示進度 pb = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 2、 設定背景顏色 pb.setBackgroundCol

豬八戒平臺有點黑了吧沒有接到差點不見了一筆賬

黑平臺昨天我朋友跟我說一件事,的確讓人感到互聯網某些企業有這麽黑暗,不知道是不是現在的平臺的規則有問題還是本身這個行業環境存在著不易的問題。我朋友的公司的一名業務專員同事,在豬八戒平臺開了一個賬號,據說,開店一定要交5000的保證金才能發布任務,他們也按照程序走,據說應該有運營一兩個月吧,店鋪也維護,裝修很好

說明UML適用的建模領域以及其作用和主要的參與人員

業務建模,用來加強對業務領域的瞭解,以領域專家為主,需求分析人員是主力,系統分析員、架構師可參與。 需求模型,用來加強需求瞭解,便於技術決策,以需求分析人員為主,系統分析員是主力,領域專家提供指導,架構師和資深開發人員參與。   設計模型:包括高層設計模型和

Python 3.8 新特性概覽沒有釋出目前還在規劃階段!

  對,你沒看錯,是Python3.8的新特性概覽。還沒有釋出,目前還在規劃階段。注意這是目前的草案,最終確定版本可能會有一些變化。   新特性:編譯位元組碼可以單獨指定存放位置。 小編來解釋一下。Python在執行的時候會生成對應程式碼的編譯位元

IIS7錯誤:不能在此路徑中使用此配置節如果在父級別上鎖定了該節便會出現這種情況鎖定是預設設定

IIS 7訪問的時候出現以下異常: 不能在此路徑中使用此配置節。如果在父級別上鎖定了該節,便會出現這種情況。鎖定是預設設定的(overrideModeDefault="Deny")...... 解決方案: 因為 IIS 7 採用了更安全的 web.config 管理機制

天書一般的gcc嵌入彙編(內聯彙編)似乎沒有選擇硬著腦瓜皮學下去吧!

 執行結果:(參考書籍《LInux核心完全註釋》,趙炯編著) 仿照手中自己編寫的程式碼: #include <stdio.h> #define mystrcpy(dest, source) \ ({ \ register char *mydest __asm__

有人說即使沒有JavaScript你也可以做網頁在純HTML

有人說,即使沒有JavaScript,你也可以做網頁。在純HTML +伺服器端語言理論中也可以完成所有功能,那麼,為什麼以及在哪裡存在JavaScript?   JS,全稱JavaScript   在瀏覽器端執行的客戶端指令碼語言是HTML和伺服器端開發

建構函式是什麼有什麼作用例項化物件面向物件分析

js裡的面向物件分析-(建立例項化物件) ECMAScript 有兩種開發模式:1.函式式(過程化),2.面向物件(OOP)。面向物件的語言有一個標誌,那就是類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。但是,ECMAScript 沒有類的概念,因此它的物件也與基於類的語言中的物件

搞了一下午還是沒有解決為什麼執行到一半就停在這裡了【資訊: Initializing c3p0 pool... com.mchange.v2.c3p0】

在進行資料庫資訊的新增和刪除的時候,發現AddServlet和DeleteServlet都不能跳轉到StudentListServlet介面,很奇怪,弄了一天,還是無法解決,並且AddServlet跳轉的時候就停在下面的介面了,請求轉發和重定向好像都沒用了。。。 request.getR

解決anaconda安裝好了只有anaconda prompt沒有SpyderAnaconda Navigator等等

解決辦法:1.先解除安裝重灌在anaconda安裝目錄下找到Uninstall-Anaconda檔案,點選解除安裝。重新找到自己的Anaconda安裝包進行安裝。注意:安裝的時候彈出的黑色命令彈窗千萬不要點關閉,讓他自己執行就好。重灌完成後Spyder,Anaconda Na

Redis主從配置後測試沒有反應兩者沒連上

Redis主從配置異常解決:Error condition on socket for SYNC: Connection refused 在Docker中搭建的Redis主從叢集時,從伺服器上的redis日誌報錯: 32677:S 08 Feb 16:14:38.947 * Connecting to

web 開發,個人中心每個請求判斷使用者是否登入沒有登入則跳轉到登入頁面登入成功後返回之前頁面

首先要在web.xml裡面配製一個usercenter過濾器,當用戶請求中包含http.../usercenter/..如下時,則會執行userCenterFilter過濾器,判斷使用者是否登入,若沒有登入,則通過req.getRequestURI();獲得請求路徑,通過r

混合模式程式集是針對“v2.0.50727”版的執行時生成的沒有配置其他資訊的情況無法在 4.0 執行時中載入該程式集

今天在把以前寫的程式碼生成工具從原來的.NET3.5升級到.NET4.0,同時準備進一步完善,將程式集都更新後,一執行程式在一處方法呼叫時報出了一個異常: 混合模式程式集是針對“v2.0.50727”版的執行時生成的,在沒有配置其他資訊的情況下,無法在 4.0 執行時中