package com.binod.customviewtest; import android.content.Context; import android.view.LayoutInflater; import android.widget.RelativeLayout; public class CustomView extends RelativeLayout{ public CustomView(Context context) { super(context); // TODO Auto-generated constructor stub // LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater mInflater = LayoutInflater.from(context); mInflater.inflate(R.layout.custom_view , this, true); } }
Including as
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.binod.customviewtest.CustomView android:layout_width="match_parent" android:layout_height="wrap_content" ></com.binod.customviewtest.CustomView> </RelativeLayout>
Custom View as
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
Just started adding a new custom view and got the error once If I clear this then can move forward
I am getting crash "Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class"
RelativeLayout : is a ViewGroup that displays child views in relative positions. AbsoluteLayout : allows us to specify the exact location of the child views and widgets. TableLayout : is a view that groups its child views into rows and columns. FrameLayout : is a placeholder on screen that is used to display a single ...
RelativeLayout is a view group that displays child views in relative positions. The position of each view can be specified as relative to sibling elements (such as to the left-of or below another view) or in positions relative to the parent RelativeLayout area (such as aligned to the bottom, left or center).
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
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"); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With