Comment gonfler Android Afficher dans le LinearLayout classe?
J'ai un petit morceau de xml, que je vais utiliser dans un grand nombre de places dans mon application. Pour cette raison, je veux le stocker dans un fichier séparé. J'ai donc créé mywidget.xml dans lequel j'ai mon xml. J'ai ensuite essayer de gonfler ce dans mywidget.java, après quoi je veux l'inclure dans un autre fichier xml comme suit:
<com.mycom.android.ui.widget.AmountWidget android:layout_width="fill_parent" android:layout_height="wrap_content"></com.mycom.android.ui.widget.AmountWidget>
Dans mon fichier java, j'essaie de gonfler la première xml comme ceci:
public class AmountWidget extends LinearLayout {
public AmountWidget(Context context) {
super(context);
LinearLayout ll = (LinearLayout) findViewById(R.layout.amount_widget);
addView(ll);
}
}
Mais avec le code ci-dessus, j'obtiens un message d'erreur disant qu'il y a une erreur de gonflage de la classe com.mycom.android.l'interface utilisateur.widget de.AmountWiget.
Ma question: est-ce que quelqu'un sait comment je peux gonfler une mise en page afin que je puisse l'utiliser comme une classe dans une autre xml fichier de mise en page?
Le xml à partir du widget ressemble à ceci:
<?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="wrap_content"
android:layout_margin="10dp"
android:padding="10dp"
android:background="@layout/border"
>
<EditText
android:id="@+id/payment_amount_major"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="35sp"
android:textStyle="bold"
android:inputType="number"
android:digits="0,1,2,3,4,5,6,7,8,9"
android:maxLength="9"
android:gravity="right"
/>
</LinearLayout>
OriginalL'auteur kramer65 | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
La
View
classe a un gonfler méthode qui enveloppeLayoutInflater.inflate
. Vous devriez être en mesure d'utiliser:pour gonfler votre widget à partir de xml. L'appel à
addView()
ne sont pas nécessaires, comme gonfler va ajouter le nouveau gonflé vue pour vous!Edit: Juste une remarque, car ce point de Vue est déjà un LinearLayout, il n'y a pas besoin d'avoir la racine du xml, vous êtes gonflant aussi être un LinearLayout. Il peut augmenter vos performances si vous gonflez seulement l'EditText et juste ajouter que pour le parent, plutôt que de nidification d'un deuxième LinearLayout au sein de la société mère. Vous pouvez définir le LinearLayout attributs (comme l'arrière-plan et du remplissage) directement sur le
AmountWidget
où il est ajouté dans le xml. Cela ne devrait pas trop dans ce cas précis, mais peut être bon à savoir si vous avez une situation avec de nombreuses vues imbriquées.Edit2: Le
View
classe a trois constructeurs: Afficher(Contexte), Vue(Context, AttributeSet), et de la Vue(Context, AttributeSet, int). Lorsque le système se gonfle d'une vue à partir de xml, il va utiliser l'un des deux derniers. Tout Affichage personnalisé aurez besoin de mettre en œuvre tous les trois de ces constructeurs. Un moyen facile de faire cela tout en réutilisant votre code ressemble à ceci:Cela fonctionnera si vous n'aimez pas ce que le ou les attributs de style arguments, et vous voulez juste le AmountWidget créé le même temps, il est gonflé.
Êtes-vous à l'aide de ce point de vue en le référençant dans un autre fichier xml? Vous avez probablement besoin de remplacer tous les trois de la de Vue des constructeurs, que le système va tenter d'utiliser avec plus d'arguments. Je vais éditer mon post avec un exemple.
Bien, cela m'a fait un pas de plus; j'ai maintenant un message d'erreur indiquant que "l'enfant a déjà une mère, et que j'ai besoin d'appeler removeView() sur le parent de l'enfant d'abord". Bien qu'il semble dire exactement ce que je dois faire, je suis un peu perdu dans cette. Est-ce parce que la chose que vous avez dit au sujet de mon LinearView être gonflé dans une nouvelle LinearView, ou est-ce parce que quelque chose d'autre?
Essayez de supprimer l'appel à
addView()
, gonfler pouvez joindre la gonflés vue. Si cela ne fonctionne pas, au lieu de supprimeraddView()
essayer de passernull
au lieu dethis
en tant que troisième argument pour gonfler.Génial! retrait de la addView() tout résolu! Vous, monsieur, a fait ma journée! Accueille depuis Amsterdam!
OriginalL'auteur MattDavis
Essayez ceci:
mContainerView
est LinearLayout qui contiennent votreEditText
etrow
est votre nom de fichier xml.OriginalL'auteur ved
Solution La Plus Simple
OriginalL'auteur Xar E Ahmer