2011-02-04 21 views
29

Ho due viste che occupano tutto lo schermo e voglio visualizzare entrambe le viste contemporaneamente, una sopra l'altra. Il mio layout è simile al seguente:Come visualizzerei una vista come una sovrapposizione di un'altra?

<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> 

Nota che myCustomView utilizza OnDraw (questo metodo ultima affermazione è invalidate()) per disegnare la grafica personalizzata. Il problema che sto ottenendo è che visualizza solo myCustomView, WebView è nascosto. Ho provato a cambiare il colore di sfondo di mycustomView in trasparente, ma questo non fa differenza.

Mi piacerebbe anche avere la possibilità di creare myCustomView come sovrapposizione su WebView o viceversa.

risposta

23

Utilizzare un RelativeLayout per i principianti.

È possibile utilizzare ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params) o una variante insieme a ViewGroup.removeView(View view) o ViewGroup.removeViewAt(int index).

Questo ovviamente richiederebbe di gonfiare le visualizzazioni manualmente utilizzando LayoutInflater ma si potrebbe mantenere un riferimento globale a ciascuna dopo il gonfiaggio e basta capovolgere tra i due.

+3

Grazie! Ho cambiato solo LinearLayout in RelativeLayout e ha funzionato. Le altre 2 risposte non hanno funzionato. – ace

+0

Benvenuto. Tutto il meglio: D – techiServices

+0

'FrameLayout' è utile anche se non sei preoccupato di posizionare le cose l'una rispetto all'altra. –

-1

Il termine fill_parent significa consumare tutto lo spazio consentito nel genitore. Prova a impostarlo su wrap_content. Quindi puoi provare ad aggiungere weight = 1 ad entrambi per provare a distribuire uniformemente lo spazio rimanente.

15

non sono sicuro se si può fare questo quando si trovano nello stesso file XML, ma so che se si sposta:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

ad un altro file xml, e creare un'altra attività. imposta la vista del contenuto sul file xml che contiene org.example.myCustomView e chiama tale attività. nel manifesto, quando si aggiunge che l'attività, aggiungere un'istruzione tema come così:

android:theme="@android:style/Theme.Dialog" 

la dichiarazione completa dovrebbe presentarsi così:

<activity android:name=".name_of_activity" 
    android:label="TextToBeOnTop" 
    android:theme="@android:style/Theme.Dialog"> 
</activity> 

il risultato sarà simile a questa (solo sarà con i componenti invece):

enter image description here

anche se Mabey possibile farlo quando sono ancora nello stesso file xml. se è possibile, sarebbe probabilmente essere fatto lasciando il manifesto da solo, e la modifica del costomeView al seguente:

<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" /> 

(ho aggiunto la dichiarazione tema nella CustomView)

se questo non è quello che stai cercando, di quello che vorrei suggerire qualcosa di simile a quello che Nick Campion ha detto, che era quello di modificare fillParent per wrapContent. potresti farlo, o potresti scegliere le dimensioni che volevi che fosse. qui ci sono due opzioni è possibile utilizzare:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="50dip" 
    android:layout_height="50dip" /> 

(si potrebbe cambiare "50dip" a qualsiasi numero che si desidera a patto che si conclude con il tuffo)

o:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
Problemi correlati