2012-05-02 2 views
10

나는 클래스에서 연장되는 GraphicsView 클래스를 가지고 있는데,이 GraphicsView 클래스를 내 프로젝트의 기본 레이아웃에 추가하려고합니다. 어떻게해야합니까?레이아웃에 맞춤보기를 추가하는 방법은 무엇입니까?

static public class GraphicsView extends View { 
     public GraphicsView(Context context) { 
     super(context); 
     } 
     @Override 
     protected void onDraw(Canvas canvas) { 
     // Drawing commands go here 
      Path rect = new Path(); 
      rect.addRect(100, 100, 250, 50, Direction.CW); 
      Paint cPaint = new Paint(); 
      cPaint.setColor(Color.LTGRAY); 
      canvas.drawPath(rect, cPaint); 
     } 
    } 

main.xml :

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

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

    <TextView 
     android:id="@+id/Customfont" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

    <View 
     android:id="@+id/view" 
      android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 
+1

View.addView (yourView); – mihail

+0

나는 이것을 어디에 넣어야 했습니까? – AnasBakez

답변

17

당신은보기를 확장하는 클래스의 전체 경로를 제공해야

<com.blah.blah.GraphicsView 
     android:id="@+id/view" 
      android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
+0

그것은 나에게 예외를주고있다! GraphicsView 클래스가 액티비티 클래스 내에 있음 – AnasBakez

+0

GraphicsView 클래스에 대해 별도의 클래스를 만듭니다. –

+2

여전히 예외가 발생합니다. com.genie.customfonts.namespace.GraphicsView android : id = "@ + id/view" android : layout_width = "fill_parent" android : layout_height = "wrap_content"/ > – AnasBakez

4

당신은이 작업을 수행 할 필요가 :

LinearLayout v = (LinearView) findViewById(R.id.linnnnlayout); 
GraphicsView myView = new myGraphicsView(this); 
v.addView(myView); 
4

귀하의 custo m ViewActivity의 내부 클래스이며 Java 컴파일러는 해당 클래스에 대해 ActivityName$GraphicsView이라는 이름을 출력합니다. 당신 때문에 $ 문자의 XML 레이아웃에 View 이름으로 직접 그 이름을 사용할 수 없습니다하지만 당신은 이런 식으로 작업을 수행 할 수 있습니다 ActivityNameGraphicsView 클래스가 선언 된 활동의 이름입니다

<view 
    class="com.package.here.ActivityName$GraphicsView" 
    android:id="@+id/view" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

.

+0

나는 클래스를 별도의 파일에 넣었습니다. 하지만 예외가 클래스 com.gen.customfonts.namespace.GraphicsView 클래스를 inflating 오류가 있다고 생각 나는 클래스 이름에 문제가있는 것 같아 !!pakage 이름은 package gen.customfonts.namespace입니다. 내가 XML에서 클래스를 무엇이라고해야합니까? – AnasBakez

+0

@AnasBakez 이전에 액티비티에 있던'GraphicsView' 클래스를 그대로두고 내 대답의 코드를 사용하려고 했습니까? 또한 View 수퍼 클래스의 다른 두 생성자를 구현해야합니다. – Luksprog

+0

나는 그것을 시도했지만 어떤 일도하지 않는다! GraphicsView 클래스의보기를 볼 수 있지만 예외를 제공하지 않는, 나는 클래스 이름이 퍼팅 오류라고 생각합니다. pakage 이름은 package gen.customfonts.namespace입니다. 활동 이름은 CustomFontsActivity입니다. 클래스 이름은 무엇이되어야합니까? – AnasBakez

12

정확하게 기억한다면 XML 파일에서보기를 사용하기 위해 더 많은 생성자를 제공해야합니다 ("Me and We"와 같은 xml 파일에 추가하십시오).

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

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

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

업데이트 : 고정 코드.

+0

감사합니다. 이것은 매우 도움이되었습니다. – SingularityFuture

0
public class MainActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    LinearLayout v = (LinearLayout) findViewById(R.id.linearLayout); 
    MyGraphics myView = new MyGraphics(this); 
    v.addView(myView); 
} 
} 


public class MyGraphics extends View { 
public MyGraphics(Context context) { 
    super(context); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    // Drawing commands go here 
    Path rect = new Path(); 
    rect.addRect(100, 100, 250, 50, Direction.CW); 
    Paint cPaint = new Paint(); 
    cPaint.setColor(Color.LTGRAY); 
    canvas.drawPath(rect, cPaint); 
} 


} 

는 XML : 내가 마침내 여기있어

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:id="@+id/linearLayout"> 

<TextView 
    android:id="@+id/Customfont" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 


</LinearLayout> 
6

코드 XML 코드

<com.customfonts.namespace.BreakDownBar 
     android:id="@+id/gview" 
      android:layout_width="fill_parent" 
     android:layout_height="20dip" 
     android:layout_marginLeft="10dip" 
     android:layout_marginRight="10dip" 
     android:background="@color/BreakDownBarBack"/> 

와 클래스

package com.customfonts.namespace; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.Path.Direction; 
import android.util.AttributeSet; 
import android.view.View; 



public class BreakDownBar extends View { 

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

     @Override 
     protected void onDraw(Canvas canvas) { 
       //Draw rectangle; 
       Path rect = new Path(); 
       rect.addRect(0, 0,250, 150,Direction.CW); 
       Paint cpaint = new Paint(); 
       cpaint.setColor(Color.GREEN); 
       canvas.drawPath(rect, cpaint); 
     } 
} 
0

이 방법은 저에게 효과적이며 전체 경로로 XML보기를 추가하고 높이 및 너비에 맞게 wrapcontent를 제공 해보십시오.

public class RectangleView extends View { 
    public RectangleView(Context context) { 
     super(context); 
    } 

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

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

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GRAY); 
     canvas.drawColor(Color.BLUE); 
     canvas.drawRect(10,10,50,50, paint); 
    } 
} 
관련 문제