J'ai un cours View1
qui étend View
. Je veux gonfler R.layout.test2.xml
dans cette classe View1
. J'ai mis un code suivant dans cette classe
public class View1 extends View {
View view;
String[] countries = new String[] {"India", "USA", "Canada"};
public View1( Context context) {
super(context);
LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=mInflater.inflate(R.layout.test2, null, false);
}
}
À partir d'une autre classe Home
Je souhaite que cette vue gonflée soit présente dans certaines circonstances. Dans la classe Home
, j'ai écrit le code suivant:
public class Home extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
CreateView();
}
public void CreateView() {
LinearLayout lv=(LinearLayout)findViewById(R.id.linearlayout);
View1 view = new View1(Home.this);
lv.addView(view);
}
}
Mais pendant que je dirige mon projet, l'activité ne me montre rien.
Vous ne pouvez pas ajouter de vues à la classe View
à la place, vous devez utiliser ViewGroup
ou l'une de ses sous-classes (comme Linearlayout
, RelativeLayout
etc). Ensuite, votre code sera comme ceci:
public class View1 extends LinearLayout {
View view;
String[] countries = new String[] {"India", "USA", "Canada"};
public View1( Context context) {
super(context);
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.test2, this, true);}}
Aussi la ligne:
mInflater.inflate(R.layout.test2, null, false)
n'ajoute rien à la vue actuelle (à cause du paramètre false
), il gonfle juste un View
à partir d'une disposition xml.
Utilisez ceci
LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService);
li.inflate(R.layout.test2, **this**, true);
Vous devez utiliser this
, et non null, et changer le paramètre false
(booléen AttachToRoot) en true
Utilisez le code ci-dessous pour gonfler votre mise en page, puis vous pouvez utiliser cette vue à n'importe quelle fin. Cela vous donnera la disposition la plus parent de votre fichier XML. Tapez cast et utilisez-le en conséquence.
View headerView = View.inflate(this, R.layout.layout_name, null);
Vous devez utiliser un ViewGroup
comme FrameLayout
et faire:
public class View1 extends FrameLayout {
public View1(Context context) {
super(context);
inflate(context, R.layout.view1, this);
}
}
Dans le XML de mise en page, utilisez le <merge
tag pour non seulement ajouter votre view1
disposition à la disposition racine, ce qui signifie que nous avons un FrameLayout
vide et votre vue définie côte à côte.
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:text="content" />
</merge>
Voir http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/
Vous ajoutez dans la vue vide de l'activité à domicile. Parce que dans la classe View1, vous n'avez qu'à gonfler la vue mais pas à en ajouter n'importe où.