Custom View Extending Relative Layout

前端 未结 2 1249
眼角桃花
眼角桃花 2020-12-15 05:13
package com.binod.customviewtest;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;

public class CustomView         


        
相关标签:
2条回答
  • 2020-12-15 05:50

    You need to have 2 more constructors. To know why

    Do I need all three constructors for an Android custom view?

    public class CustomView extends RelativeLayout{
    
        LayoutInflater mInflater;
        public CustomView(Context context) {
            super(context);
             mInflater = LayoutInflater.from(context);
             init(); 
    
        }
        public CustomView(Context context, AttributeSet attrs, int defStyle)
        {
        super(context, attrs, defStyle);
        mInflater = LayoutInflater.from(context);
        init(); 
        }
        public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mInflater = LayoutInflater.from(context);
        init(); 
        }
       public void init()
       {
           View v = mInflater.inflate(R.layout.custom_view, this, true);
           TextView tv = (TextView) v.findViewById(R.id.textView1);
       tv.setText(" Custom RelativeLayout");
       }
    }
    

    I am posting an example. My packagename is different

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    <com.example.testall.CustomView
            android:id="@+id/timer1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </RelativeLayout>
    

    custom_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="60dp"
            android:text="My Custom View" />
    
    </RelativeLayout>
    

    MainActivity.java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            }
    }
    

    Snap

    enter image description here

    As pskink suggested there in a RelativeLayout in activity_main.xml with a child CustomView. Then CustomView extends RealtiveLayout and then again you inflate a customview with RelativeLayout and a child TextView. No need for all these. Just a CustomView. Have a TextView created programatically and then add textview to RelativeLayout

    Edit:

    activity_main.xml

    <com.example.testall.CustomView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/timer1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    

    CustomView

    public class CustomView extends RelativeLayout{
    
        TextView tv;
        public CustomView(Context context) {
            super(context);
             tv = new TextView(context);
             init(); 
    
        }
        public CustomView(Context context, AttributeSet attrs, int defStyle)
        {
        super(context, attrs, defStyle);
        tv = new TextView(context);
        init(); 
        }
        public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        tv = new TextView(context);
        init(); 
        }
       public void init()
       {
           this.addView(tv);
           tv.setText(" Custom RelativeLayout");
       }
    }
    
    0 讨论(0)
  • 2020-12-15 06:07

    Try to get Activity and use this

     {
        LayoutInflater inflter = activity.getLayoutInflater();
        View v = inflter.inflate(R.layout.custom_view,null);
        this.addView(v); or addView(v);
        }
    
    0 讨论(0)
提交回复
热议问题