Я хочу создать наложения справки, подобные тем, которые вы видите при первой загрузке ICS, или в таких приложениях, как ES File Explorer или Apex Launcher (их гораздо больше, но я не могу вспомнить их прямо сейчас). Это просто относительный макет, в котором один вид находится поверх другого? Мне не удалось найти образец кода для этого. Кто-нибудь знает, как это делается, или есть идеи?
ViewGroup
этим может справиться обычай для слоя «тренерские отметки», и есть библиотеки (например,ShowcaseView
), которые предлагают стандартные реализации этого шаблона.«Метка тренера» - это «Оверлей справки» в UX talk :-)
coach_mark.xml - это макет вашей марки тренера
coach_mark_master_view - это идентификатор самого верхнего просмотра (корневого) в файле coach_mark.xml.
public void onCoachMark(){ final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialog.setContentView(R.layout.coach_mark); dialog.setCanceledOnTouchOutside(true); //for dismissing anywhere you touch View masterView = dialog.findViewById(R.id.coach_mark_master_view); masterView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); }
Добавлен образец файла coach_mark.xml (к этому отличному решению, предоставленному Одедом Брейнером), чтобы пользователь мог легко скопировать и вставить, чтобы быстро увидеть рабочий пример.
Здесь, например, здесь, в файле coach_mark.xml, измените -> drawable / coach_marks на свое изображение:
coach_mark.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/coach_mark_master_view"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/coach_marks_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:src="@drawable/coach_marks" /> </RelativeLayout> </LinearLayout>
И при желании используйте эту тему для удаления отступов:
<style name="WalkthroughTheme" parent="Theme.AppCompat"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">false</item> </style>
источник
A dialog is a small window that prompts [...]. A dialog does not fill the screen and is normally used for modal events [...].
. Если я использую этот код, мое основное представление будет сжато в небольшой части экрана. Если я установилandroid:layout_width="640dp" android:layout_height="480dp"
(то есть фактические значения экрана, на котором я тестирую), он работает правильно. (конечно, это невыполнимое решение)new Dialog(getContext(), R.style.WalkthroughTheme);
Вы можете сделать это довольно быстро. Вы добавляете, например, LinearLayout, где вы помещаете изображение с альфа-каналом, которое соответствует вашей справочной информации и тому, что вы хотите нарисовать как наложение. В XML-файле своей деятельности вы помещаете этот макет в RelativeLayout после макета вашей активности с видимостью Gone. Если вы хотите нарисовать справочную информацию, вам просто нужно сделать эту видимость видимой.
Надеюсь, мне понятно, если у вас есть какие-либо вопросы, я буду рад на них ответить.
источник
См. Мой другой ответ, как программно показать макет наложения поверх текущего действия. Макет действия layout.xml не должен ничего знать о обложке. Вы можете наложить полупрозрачный оверлей, закрыть только часть экрана, одно или несколько текстовых окон и кнопок на нем ... Как программно наложить кнопку?
Моя цель состояла в том, чтобы основные действия не знали о какой-либо наложенной оболочке, наложения приходят и уходят, много разных наложений, все еще можно использовать текстовые файлы overlay1.xml в качестве шаблона, а содержимое должно обновляться программно. Я делаю в значительной степени то, что CommonsWare сказал нам, в моем посте показан фактический программный код для начала работы.
отказ от ответственности: OPs «Спасибо за ваш вклад. Вот как я себе это представлял. Я должен отдать должное приведенному ниже ответу». Комментарий не означает мой ответ, а ответ CommonsWare. Stackoverflow изменил порядок публикаций.
источник