Mise en page params de chargé de vue sont ignorés
J'essaie d'écrire ma propre View
et j'ai un problème avec LayoutParams
.
L'idée est d'étendre ViewGroup
(LinearLayout
)
public class MyView extends LinearLayout{
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context) {
super(context);
}
public void putContent(){
setOrientation(HORIZONTAL);
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < 5; i++){
View view = inflater.inflate(R.layout.item, null);
TextView tv = (TextView)view.findViewById(R.id.item_text);
tv.setText("Item " + i);
addView(view);
}
}
}
Comme vous pouvez le voir putContent
méthode gonfle un des éléments et l'ajoute à ma vue. Voici un élément de mise en page
<?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:background="#FFFFFF">
<TextView android:text="TextView"
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"/>
</LinearLayout>
Et la principale disposition de l'écran
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android_layout_weight="1"
android:text="@string/hello"
/>
<my.test.MyView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android_layout_weight="1"
/>
</LinearLayout>
Et de l'activité code
public class Start extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyView myView = (MyView)findViewById(R.id.my_view);
myView.putContent();
}
}
Voici la capture d'écran de ce que je reçois
Donc problème est le suivant: les attributs de l'élément de l'élément racine est ignoré
android:layout_width="match_parent"
android:layout_height="match_parent"
Mais dans le résultat que je veux obtenir quelque chose comme ceci (j'obtiens ce résultat quand remplacer addView(view);
avec cette ligne)
addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1F));
Donc, la question est: comment je peux obtenir ce résultat sans codé en dur LayoutParams ?
Merci pour toute aide!
mise à jour
Je regarde la view
champs variables dans le debug mode - le mLayoutParams
est null
, et est devenu not null lorsque j'ajoute gonflé view
des parents avec addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1F));
.
Mais mLayoutParams
de l'enfant de tout juste chargé de vue n'est pas nulle.
Pourquoi LayoutParams de seul élément racine xml de mise en page sont ignorés lors de l'affichage gonflé?
- J'ai ts difficile de commenter votre code sans votre code....
- Ce n'est pas vraiment clair. Je pars du principe que ci-dessus est le xml que vous êtes gonflant? Mais qu'est-ce que le
ll
dans votre code? Ou êtes-vous ajouter quelque chose pour le xml, et si oui, que faites-vous en ajoutant à cela? ll
créé dynamiquement dans le code, je me gonfler donnée xml et de le mettre enll
- aussi quand je passe la nouvelle
LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1F);
en addView avecv
il fonctionne très bien ! (les marges sont ignorés dans ce cas)
Vous devez vous connecter pour publier un commentaire.
La suite de la déclaration de gonfler:
Ok, si je comprends bien, vous avez le XML mentionnés ci-dessus dans
ll
, et vous êtes en train d'ajouter quelque chose (R.layout.item_layout
en a).Les problèmes que je rencontre sont:
ll
) amatch_parent
, mais nous ne savons pas si elle a même un parent. Si le comportement est difficile à deviner.R.layout.item_layout
n'est pas le xml que vous avez indiqué). Il se pourrait donc que les comportements attendus, ou encore indéfini (donc prévu qu'il est inattendu).Il pouvait être il y a trop de code à poster ici, je ne sais pas, mais alors vous feriez mieux d'utiliser le hiérarchie de la visionneuse afin de vérifier ce que les paramètres de la vue dans votre arbre ont, de sorte que vous pouvez réellement voir ce qu'il se passe.
Aussi, l'esprit que pas toutes les Vues de la marge.
Dans Android "layout_" paramètres, reportez-vous à la la manière dont le point de Vue actuel se comporte dans son parent de mise en page. Dans ce cas, son parent est ll, mais nous ne pouvons pas voir ce qui est.
Que pour la mise en page de la TextView à l'intérieur de la LinearLayout, depuis le LinearLayout est vertical, tous ses enfants automatiquement leurs layout_height remplacée par "wrap_content" de sorte qu'ils peuvent être disposés l'un sous l'autre correctement.
Alors maintenant, la question est, que faites-vous voir et de ce que vous voulez voir?