Как бы я отобразил один вид как наложение другого? - PullRequest
29 голосов
/ 04 февраля 2011

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

<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 (последний оператор этого метода недействителен ()) для рисования пользовательской графики.Проблема, которую я получаю, заключается в том, что она отображает только myCustomView, WebView скрыто.Я попытался изменить цвет фона mycustomView на прозрачный, но это не имеет значения.

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

Ответы [ 3 ]

23 голосов
/ 04 февраля 2011

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

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

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

15 голосов
/ 04 февраля 2011

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

или:

<org.example.myCustomView  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content" />
0 голосов
/ 04 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...