Подтвердить что ты не робот

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

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

<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 или наоборот.

4b9b3361

Ответ 1

Используйте RelativeLayout для стартеров.

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

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

Ответ 2

Я не уверен, что вы можете сделать это, когда они находятся в одном 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>

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

enter image description here

хотя это возможно сделать, когда они все еще находятся в одном 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" на любое количество, которое вы хотите, до тех пор, пока оно заканчивается провалом)

или:

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

Ответ 3

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