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);
}
}
Y compris comme
<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>
Vue personnalisée en tant que
<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>
Je viens de commencer à ajouter une nouvelle vue personnalisée et j'ai obtenu l'erreur une fois Si j'efface cela, je peux avancer
Je reçois un crash "Causé par: Android.view.InflateException: ligne de fichier XML binaire # 1: erreur de gonflage de la classe"
Vous devez avoir 2 constructeurs supplémentaires. Pour savoir pourquoi
Ai-je besoin des trois constructeurs pour une vue Android vue personnalisée?
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");
}
}
Je poste un exemple. Mon nom de pack est différent
<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);
}
}
Casser
Comme pskink l'a suggéré dans un RelativeLayout dans activity_main.xml
avec un enfant CustomView. Ensuite, CustomView étend RealtiveLayout, puis à nouveau vous gonflez une vue personnalisée avec RelativeLayout et une TextView enfant. Pas besoin de tout cela. Juste une CustomView. Faites créer TextView par programmation, puis ajoutez TextView à RelativeLayout
Éditer:
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"
/>
Vue personnalisée
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");
}
}
Essayez d'obtenir une activité et utilisez-la
{
LayoutInflater inflter = activity.getLayoutInflater();
View v = inflter.inflate(R.layout.custom_view,null);
this.addView(v); or addView(v);
}