J'ai deux vues qui prennent la totalité de l'écran et je veux afficher les deux vues en même temps, l'une au-dessus de l'autre. Ma disposition ressemble à ceci:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<WebView
Android:id="@+id/webview"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>
<org.example.myCustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>
</LinearLayout>
Notez que myCustomView
utilise onDraw (cette dernière instruction de méthode est invalidate ()) pour dessiner des graphiques personnalisés. Le problème que j'obtiens est qu'il affiche uniquement myCustomView
, WebView
est masqué. J'ai essayé de changer la couleur d'arrière-plan de mycustomView
en transparent mais cela ne fait aucune différence.
Je voudrais également avoir la possibilité de créer myCustomView
en superposition sur WebView
ou vice versa.
Utilisez un RelativeLayout
pour commencer.
Vous pouvez utiliser la ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params)
ou une variante avec ViewGroup.removeView(View view)
ou ViewGroup.removeViewAt(int index)
.
Cela vous obligerait évidemment à gonfler les vues manuellement en utilisant LayoutInflater
mais vous pourriez garder une référence globale à chacune après le gonflement et simplement basculer entre les deux.
Je ne sais pas si vous pouvez le faire lorsqu'ils sont dans le même fichier xml, mais je sais que si vous vous déplacez:
<org.example.myCustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
vers un autre fichier xml et créez une autre activité. définissez la vue de contenu sur le fichier xml qui contient org.example.myCustomView et appelez cette activité. dans le manifeste, lorsque vous ajoutez cette activité, ajoutez une déclaration de thème comme suit:
Android:theme="@Android:style/Theme.Dialog"
la déclaration complète devrait ressembler à ceci:
<activity Android:name=".name_of_activity"
Android:label="TextToBeOnTop"
Android:theme="@Android:style/Theme.Dialog">
</activity>
le résultat ressemblera à ceci (seulement avec vos composants à la place):
bien qu'il soit possible de le faire quand ils sont toujours dans le même fichier xml. si c'est possible, cela serait probablement fait en laissant le manifeste seul et en modifiant votre costomeView comme suit:
<org.example.myCustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:theme="@Android:style/Theme.Dialog" />
(J'ai ajouté la déclaration de thème dans le CustomView)
si ce n'est pas ce que vous recherchez, je recommanderais quelque chose de similaire à ce que Nick Campion a dit, qui était de changer fillParent en wrapContent. vous pouvez le faire, ou vous pouvez choisir la taille souhaitée. voici deux options que vous pourriez utiliser:
<org.example.myCustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="50dip"
Android:layout_height="50dip" />
(vous pouvez changer "50dip" en n'importe quel nombre tant qu'il se termine par dip)
ou:
<org.example.myCustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />