Comment passer AttributeSet lors de la création vue par programmation sous android
Je créer par programmation comme horizontalview alors, comment passer AttributeSet dans la programmation.
Mon constructeur ressemble à ceci:
public HorizontalListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
J'ai essayer ceci:
mHlvSimpleList= new HorizontalListView(mcontext,R.style.niceview);
Erreur:
Le constructeur HorizontalListView(Contexte, int) n'est pas défini
dans style.xml
<style name="niceview">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
Comment passer AttributeSet dans horizontalistview constructeur paramètre correspondant?
- stackoverflow.com/a/25457076/1105214
- Je trouve que c'est plus facile de simplement faire une mise en page pour un affichage personnalisé et de le gonfler, et si vous avez plusieurs instances qui diffèrent légèrement, juste faire un style de base et la sous-classe avec
<style="AutoDroid" parent="Droid">
,<style="DeceptaDroid" parent="Droid">
Vous devez vous connecter pour publier un commentaire.
Le constructeur
Context
etAttributeSet
est utilisé lors de votre point de vue est gonflé à partir de xml. Vous ne devriez pas l'utiliser pour créer un objet. Vous devez utiliser le constructeur avecContext
comme param.AttributeSet
est de l'interface, et vous pouvez créer une instance de l'époque et de mettre en œuvre toute méthode, comme illustré ci-dessous:Et de l'utiliser
mais il n'est pas correct manière.
Vous devez utiliser des méthodes à partir de votre point de vue de définir les propriétés de la vue.
Par exemple pour définir LayoutParams est deux façon de le faire
D'abord par la méthode
setLayoutParams()
La seconde lorsque vous avez ajouté votre point de vue à ViewGroup;
Lorsque vous avez ou vous souhaitez ajouter votre point de vue, par exemple, à
RelativeLayout
vous devez utiliserLayoutParams
pertinents pour ce ViewGroup. Il estRelativeLayout.LayoutParams
Context
comme params et l'ensemble de vos propriétés par les méthodes.j'ai un moyen d'obtenir le AttributeSet à partir d'un fichier xml.
si la valeur du nombre est plus grand que 0, signifie que vous obtenez un droit AttributeSet.
mon xml/test.xml elle est comme ces:
MyListView
est déjà dans un fichier de mise en page, de sorte que le gonflage de il va passer dans l'attribut, c'est "l'inflation" constructeur (MyListView(Context c, AttributeSet a
). Je ne peux pas vraiment penser à une autre façon d'utiliser cette part du piratage informatique de le cadre, mais peut-être erroné.Je suis tombé sur cette question, tout en travaillant avec une vue qui a oublié de mettre en œuvre les
SomeView(Context)
constructeur et seulement l'un avecSomeView(Context, AttributeSet)
disponibles. À partir de la le code source de ViewGroup il semble queSomeView(context)
serait équivalent àSomeView(context, null)
, si.Vous pouvez créer un attribut référençant un style personnalisé. Ensuite, vous devriez être en mesure d'instancier l'aide de
Un exemple complet est disponible ici
https://gist.github.com/romannurik/7026222
View(Context, AttributeSet, int)
oùR.attr.niceview
est l'attribut des points pour le style par défaut