2015-12-02 186 views
1

我正在進行自定義佈局,但沒有顯示,我不知道爲什麼。自定義線性佈局不顯示

這裏就是類定義

<com.example.name.gw2applicaton.SpecializationView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="65dp" 
      android:layout_height="match_parent"> 

      <Button 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:text="yop2" /> 

      <Button 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:text="yop2" /> 

    </LinearLayout> 
</com.example.name.gw2applicaton.SpecializationView> 

這裏是類,只是一個構造函數中的XML文件

public class SpecializationView extends LinearLayout { 

    public SpecializationView(Context context) { 
     super(context); 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     inflater.inflate(R.layout.layout_specialization, this, true); 
    } 
} 

最後在使用類

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <com.example.name.gw2applicaton.SpecializationView 
     android:id="@+id/view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center_vertical"> 
     </com.example.name.gw2applicaton.SpecializationView> 

     </LinearLayout> 
</LinearLayout> 

SpecializationView不可見,我不知道爲什麼。 我在這裏做錯了什麼?

+0

回答下面,讓我知道如果這有幫助 –

回答

0

對於自定義視圖而言,這不像它正在嘗試的那樣。使用這種約定,而不是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <!-- just include the layout you defined else where --> 
     <include layout="@layout/layout_specialization"/> 

    </LinearLayout> 

其中layout_specialization.xml是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="65dp" 
    android:layout_height="match_parent"> 

     <Button 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:text="yop2" /> 

     <Button 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:text="yop2" /> 

</LinearLayout> 

注:當你需要修改現有的視圖或ViewGroup中來,您應該使用自定義視圖定義具有特殊的編程功能,例如定位,動態內容,小衆小部件等等。當您想像使用現有的小部件功能一樣使用視圖時,請按照我所述進行操作。包含xml標籤非常適合定義xml佈局,並在您的項目中重複使用它,以便最大程度地減少重複代碼。

編輯:

你佈局沒有顯示的方式是已定義僅構造爲編程創建視圖(通過Java代碼,而不是XML)的原因。爲了讓您的自定義視圖的XML定義如下擴展類needd額外的構造函數:

public class SpecializationView extends LinearLayout { 

    /* Programmatic Constructor */ 
    public SpecializationView(Context context) { 
     super(context); 
     init(context, null, 0); 
    } 

    /* An XML Constructor */ 
    public SpecializationView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context, attrs, 0); 
    } 

    /* An XML Constructor */ 
    public SpecializationView(Context context, AttributeSet attrs, int resId) { 
     super(context, attrs, resId); 
     init(context, attrs, resId); 
    } 

    /** 
    * All initialization happens here! 
    */ 
    private void init(Context context, AttributeSet attrs, int resId){ 
     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     inflater.inflate(R.layout.layout_specialization, this, true); 
    } 
} 

這個定義現在包括創建自定義視圖(應該現在大概爲你工作)的XML能力。它將工作的原因是現在您將屬性集或通過xml定義的屬性發送給構造函數。由於您沒有包含它,因此在xml中定義時,它不知道如何爲自定義視圖執行操作,並且無法訪問您可能定義爲自定義的佈局屬性。

+0

感謝您的信息,但顯然無法實例化類SpecializationView – F4r3n

+0

只需去與包含選項我建議:)你不應該使用佈局充氣器膨脹自定義視圖反正看起來很容易出錯,看起來不正確 –