2011-08-19 77 views
5

我正在嘗試將xml佈局充氣到自定義ViewGroup。膨脹佈局後,ViewGroup僅顯示佈局的根視圖,實際上它應該將完整佈局文件顯示在ViewGroup中。將XML佈局充氣到自定義ViewGroup中

我已經通過了其他類似的問題發佈在相關的stackoverflow和其他網站上,但沒有任何幫助。

這裏是我的自定義ViewGroup的代碼:

public class ViewEvent extends ViewGroup { 
private final String LOG_TAG="Month View Event"; 
public ViewEvent(Context context) { 
     super(context); 
    } 

    public ViewEvent(Context context,AttributeSet attrs) { 
     super(context,attrs); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {  

     int childCount= getChildCount(); 
     for(int i=0;i<childCount;i++) 
     { 
      Log.i(LOG_TAG, "Child: " + i + ", Layout [l,r,t,b]: " + l + "," + r + "," + t + "," + b); 
      View v=getChildAt(i); 
      if(v instanceof LinearLayout) 
      { 
       Log.i(LOG_TAG, "Event child count: " + ((ViewGroup)v).getChildCount()); // displaying the child count 1 
       v.layout(0, 0, r-l, b-t); 
      } 
      //v.layout(l, r, t, b); 
     } 
    } 

Activity,我使用這個自定義視圖組:

ViewEvent event = new ViewEvent(getApplicationContext()); 
LayoutInflater inflator; 
inflator=(LayoutInflater)appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
inflator.inflate(R.layout.try1, event); 
setContentView(event); 

以下是佈局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffaa77"> 


    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#ffff0000" 
     android:text="asdasadfas" /> 

</LinearLayout> 

膨脹這個佈局後,我只得到根LinearLayout,背景顏色爲#ffff0000TextView沒有顯示出來。

我在做什麼錯或缺少什麼?

回答

-1

嘗試像這樣。你沒有爲你的TextView聲明任何id。

<TextView 
      android:id="@+id/testTextId" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#ffff0000" 
      android:text="asdasadfas" /> 

然後像下面那樣訪問這個TextView。

TextView testTextView = (TextView) ViewEvent.findViewById(R.id.testTextId); 
+0

它是可訪問的,但它不顯示! –

2

嘗試事件的getParent()(您ViewEvent):

inflator.inflate(R.layout.try1, event.getParent(), false);