Как бы я отобразил один вид как наложение другого?
У меня есть два вида, занимающие весь экран, и я хочу отображать оба вида одновременно, один поверх другого. Мой макет выглядит так:
<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
обоим, чтобы попытаться равномерно распределить оставшееся пространство.