Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之根布局動態加載子布局時邊距設置無效問題

Android之根布局動態加載子布局時邊距設置無效問題

編輯:關於Android編程

Android大部分的控件都會有padding和layout_margin兩個屬性,一般來說它們的區別是:

padding控件中的內容離控件邊緣的距離。

margin: 控件離它的父控件邊緣的距離。


今天做了一個由根布局動態加載子布局的實驗,結果發現子布局中的這兩個屬性可以按預期的效果顯示,但是給根布局設置的padding並沒有對被加載的子布局產生效果。


代碼如下:

根布局文件名為activity_main.xml,其xml文件定義的內容為:


    tools:context=".MainActivity" >


上面這個根布局會添加子布局table_layout.xml中定義的布局,這個xml文件的定義內容是:


    
        android:textSize="30sp" />

源碼中實現動態加載的代碼段:

// 創建用於承載表的布局
LinearLayout subLayout = (LinearLayout) this.getLayoutInflater().inflate(R.layout.table_layout, null);
// 填充表名
tableNameTextView = ((TextView) subLayout.findViewById(R.id.tableLayout_tableName));
tableNameTextView.setText("tablename");

this.addContentView(subLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

但是上面這段代碼執行後,table_layout布局裡面的邊距設置會正常顯示,但是activity_main布局中table_layout的邊緣卻緊緊挨著activity_main的邊緣,說明activity_main的padding並沒有其效果。


這個問題我糾結了將近3個消失,終於設置了根局部和子布局的margin和padding也不行,分別設置top、right、bottom、left也不行,最終的解決辦法卻讓我感到非常匪夷所思:

只需要在根布局中再加一個布局,把這個布局當做根布局來動態加載子布局就好了。

不知道為什麼類型完全相同的根布局就會出錯,也許'根'布局有某些特別的限制吧。


修改之後的代碼是:

activity_main.xml:


    
     
    


源碼:

LinearLayout subLayout = (LinearLayout) this.getLayoutInflater().inflate(R.layout.table_layout, null);
// 填充表名
tableNameTextView = ((TextView) subLayout.findViewById(R.id.tableLayout_tableName));
tableNameTextView.setText("tablename");

LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainLayout);  //通過這個新加的"根布局"來加載子布局
mainLayout.addView(subLayout);



如果轉載請注明出處:http://blog.csdn.net/gophers?viewmode=contents


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved