How to add custom view to the layout?

后端 未结 7 1603
灰色年华
灰色年华 2020-11-30 07:35

I have a GraphicsView class that extends from the View class and I want to add this GraphicsView class to the main layout in my projec

相关标签:
7条回答
  • 2020-11-30 08:13

    This is working for me and add the view in XML with full path and try giving wrapcontent for height and width.

    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);
        }
    }
    
    0 讨论(0)
  • 2020-11-30 08:15

    Because your custom View is an inner class in your Activity the java compiler will output the name ActivityName$GraphicsView for that class. You can't use that name directly as the View name in the xml layout because of the $ character but you can do it like this:

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

    where ActivityName is the name of the activity where your GraphicsView class is declared.

    0 讨论(0)
  • 2020-11-30 08:15
    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>
    
    0 讨论(0)
  • 2020-11-30 08:21

    i finaly got it here is the code the XML code

    <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"/>
    

    and the class

    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 讨论(0)
  • 2020-11-30 08:23

    you need to do this:

    LinearLayout v = (LinearView) findViewById(R.id.linnnnlayout);
    GraphicsView myView = new myGraphicsView(this);
    v.addView(myView);
    
    0 讨论(0)
  • 2020-11-30 08:25

    If I remember correctly, you need to provide more constructors to use view from xml file (add it to xml file like "Me and We" suggested).

    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);
    }
    

    Update: fixed code.

    0 讨论(0)
提交回复
热议问题