Sample code that extends the View class and uses an xml file layout

I'm new to the Android world ... it will be great help if someone fixes me ... what am I doing wrong, the code is below ...

  • Requirement: You must create your own view (using the xml layout file) so that the same view is used inside my applications. Here I go with the sample code I'm working on,

cutomviewxml.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> 

Extended view class ... code ...

mycustomTextview.java

 public class mycustomTextview extends View { private View mView; Context mycontext; public mycustomTextview(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.mycontext = context; LayoutInflater inflater; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mView = inflater.inflate(R.layout.cutomviewxml, null); } 

Action file main.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" android:orientation="vertical" > <com.motorola.mycustomTextview android:id="@+id/customtextview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_marginLeft="143dp" android:layout_marginTop="69dp" android:layout_toRightOf="@+id/textView1" /> </RelativeLayout> 

Action class sample.java ..

 public class sample extends Activity{ private static final String LOG_TAG = "sampleActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(LOG_TAG,"OnCreate of sampleActivity"); setContentView(R.layout.main); } } 
+6
source share
4 answers

I think you made a small mistake in mycustomTextview , when you mycustomTextview your layout, you also need to go through ViewGroup, you can use this line

 mView = inflater.inflate(R.layout.cutomviewxml, this); 
+5
source

To access views inside a custom view, override the onFinishInflate () method and use findViewById (). To solve the problem, the solution will be as follows.

 public class mycustomTextview extends LinearLayout { Context mycontext; private TextView textView1; public mycustomTextview(Context context, AttributeSet attrs) { super(context, attrs); this.mycontext = context; } @Override protected void onFinishInflate() { textView1=(TextView) findViewById(R.id.textView1); } } 
+4
source

Use this in your xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <yourpackagename.viewclassname android:id="@+id/myView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></yourpackagename.viewclassname> </LinearLayout> 
+3
source
 public class ExampleView extends FrameLayout { ImageView mImage; public ExampleView(Context context) { super(context); init(context); } public void init(Context context) { View view = inflate(context, R.layout.my_view_layout,this); view.findViewById(R.id.image) } } 
0
source

Source: https://habr.com/ru/post/901035/


All Articles