Как бы я отобразил один вид как наложение другого?

У меня есть два вида, занимающие весь экран, и я хочу отображать оба вида одновременно, один поверх другого. Мой макет выглядит так:

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

Обратите внимание, что myCustomView использует onDraw (последний оператор этого метода является invalidate()) для рисования пользовательской графики. Проблема, которую я получаю, состоит в том, что это только показывает myCustomView, WebView скрыт. Я пытался изменить цвет фона mycustomView прозрачным, но это не имеет значения.

Я также хотел бы иметь возможность сделать myCustomView как наложение на WebView или наоборот.

3 ответа

Решение

Использовать RelativeLayout для начинающих.

Вы могли бы использовать ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params) или вариант вместе с ViewGroup.removeView(View view) или же ViewGroup.removeViewAt(int index),

Это, очевидно, потребует от вас надувать взгляды вручную, используя LayoutInflater но вы можете сохранить глобальную ссылку на каждый после надувания и просто переключаться между ними.

Я не уверен, что вы можете сделать это, когда они находятся в одном файле XML, но я знаю, что если вы переместите:

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

в другой файл XML, и создайте другое действие. установите представление содержимого для файла XML, который содержит org.example.myCustomView, и вызовите это действие. в манифесте при добавлении этого действия добавьте оператор темы следующим образом:

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

полное заявление должно выглядеть так:

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

результат будет выглядеть так (только с вашими компонентами):

хотя это возможно сделать, когда они все еще находятся в том же файле XML. если это возможно, это, вероятно, будет сделано, если оставить манифест в одиночку и отредактировать ваш costomeView следующим образом:

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

(Я добавил утверждение темы в CustomView)

если это не то, что вы ищете, то я бы рекомендовал что-то похожее на то, что сказал Ник Кэмпион, что должно было заменить fillParent на wrapContent. Вы можете сделать это, или вы можете выбрать, какой размер вы хотите, чтобы он был. Вот два варианта, которые вы можете использовать:

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

(вы можете изменить "50dip" на любое число, которое вы хотите, если оно заканчивается dip)

или же:

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

Семестр fill_parent значит занимает все допустимое место в родительском. Попробуйте установить его wrap_content, Тогда вы можете попробовать добавить weight = 1 обоим, чтобы попытаться равномерно распределить оставшееся пространство.

Другие вопросы по тегам