2013-03-21 59 views
0

我試圖在Android的我提到在MainActivity我所有的arrtrs名單和XML文件自定義的意見,但我有在main.xml錯誤:創建自定義視圖和XML命名空間

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews.piechart" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <com.example.customviews.charting.piechart.MainActivity 
     android:layout_width="match_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     custom:titleText="Background color" 
     custom:valueColor="@android:color/holo_green_light" 
     /> 

</LinearLayout> 
+0

是什麼錯誤..粘貼logcat數據 – stinepike 2013-03-21 08:12:52

+0

com.example.customviews.charting.piechart.MainActivity真的是一個視圖嗎?你需要發佈更多的東西來獲得答案。 – akaya 2013-03-21 08:14:48

+0

在我看來'com.example.customviews.charting.piechart.MainActivity'沒有擴展'View',或者如果它是你需要一個更好的方式命名你的類/視圖。 – hardartcore 2013-03-21 08:24:33

回答

0

你有一個沒有參數的構造函數?

像您應該添加一個構造函數:

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

public MainActivity(Context context) { 
    super(context); 
} 

你問一個自定義視圖的一個簡單的例子:

public class BirdView extends ImageView { 

private float direction = 0; 
Paint paint = new Paint(); 

public BirdView(Context context) { 
    super(context); 
} 

public BirdView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    paint.setColor(Color.WHITE); 
    paint.setStrokeWidth(6); 
} 

public BirdView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 
      MeasureSpec.getSize(heightMeasureSpec)); 
} 

@Override 
public void draw(Canvas canvas) { 
    canvas.save(); 
    int stratX = getWidth()/2; 
    int startY = getHeight()/2; 
    canvas.rotate(direction, stratX, startY); 
    super.draw(canvas); 
    canvas.restore(); 
    canvas.drawLine(stratX, startY, stratX, startY + 80, paint); 
} 

public void update(float dir) { 
    direction = dir; 
    invalidate(); 
} 

}

+0

是的,我有構造函數,但是在logcat中它給出了錯誤Unable實例化活動ComponentInfo {com.example.customviews.charting.piechart/com.example.customviews.charting.piechart.MainActivity}:java.lang.InstantiationException:無法實例化類com.example.customviews.charting.piechart.MainActivity ;沒有空的構造函數 – OmD 2013-03-21 09:12:13

+0

我認爲沒有參數的構造函數是問題。你可以在那裏包裝:public MainActivity(Context context)super(context); } – baronS 2013-03-21 09:15:34

+0

下面是代碼公共類MainActivity擴展視圖{ 公共MainActivity(上下文的背景下,AttributeSet中的ATTRS){ 超(背景下,ATTRS);}我還是在其他代碼也 – OmD 2013-03-21 09:42:13