android — Как создать наложение справки, как вы видите в нескольких приложениях для Android и ICS?" />

Как создать наложение справки, как вы видите в нескольких приложениях для Android и ICS?

Я хочу создать справочные наложения, подобные тем, которые вы видите, когда ICS загружается впервые, или в приложениях, таких как ES File Explorer или Apex Launcher (их больше, но я не могу думать о них сейчас). Является ли это просто относительной компоновкой с одним видом, расположенным поверх другого? Я не смог найти пример кода для такой вещи. Кто-нибудь знает, как это сделать, или есть идеи?

ES File Explorer ES File Explorer

91 голос | спросил ssuperz28 18 PMpWed, 18 Apr 2012 23:52:13 +040052Wednesday 2012, 23:52:13

3 ответа


0

Предположим, вы обычно вызывали бы setContentView(R.layout.main), но при первом запуске вы захотите использовать это наложение.

Шаг # 1: создайте FrameLayout в коде Java и передайте его setContentView()

Шаг № 2. Используйте LayoutInflater, чтобы надуть R.layout.main в FrameLayout.

Шаг № 3: Используйте LayoutInflater, чтобы наложить оверлей в FrameLayout.

Шаг № 4. Когда пользователь нажимает кнопку (или любую другую), чтобы закрыть наложение, вызовите removeView(), чтобы удалить наложение из FrameLayout.

Поскольку оверлей является более поздним дочерним элементом для FrameLayout, он будет перемещаться поверх содержимого R.layout.main

ответил CommonsWare 18 PMpWed, 18 Apr 2012 23:59:34 +040059Wednesday 2012, 23:59:34
0

«Знак тренера» - это «Наложение справки» в разговоре UX: -)

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 (к этому превосходному решению, предоставленному Одедом Брейнером), чтобы его было легко скопировать и amp; вставьте, чтобы быстро увидеть рабочий пример.

Пример файла 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>
ответил Oded Breiner 13 J0000006Europe/Moscow 2013, 19:49:08
0

Посмотрите мой другой ответ, как программно показывать макет наложения поверх текущей активности. Файл Activity.xml не должен ничего знать о наложенной обложке. Вы можете нанести полупрозрачный оверлей, покрыть только часть экрана, один или несколько текстовых видов и кнопок на нем ... Как программно наложить кнопку?

  • создайте шаблон res /layout /paused.xml RelativeLayout или используйте любой макет верхнего уровня
  • создайте функцию для отображения обложки наложения
  • ключ для получения дескриптора layout.xml, использования класса LayoutInflater для анализа xml для просмотра объекта, добавления представления наложения к текущей структуре макета
  • В моем примере используется таймер для уничтожения объекта наложения путем полного удаления его из структуры представления. Это, вероятно, то, что вы хотите, чтобы избавиться от этого без следа.

Моя цель состояла в том, чтобы основные действия не знали о каком-либо наложении обложек, наложениях приходили и уходили, много разных наложений, все еще могли использовать текстовые файлы overlay1.xml в качестве шаблона, и содержимое должно обновляться программно. Я делаю в значительной степени то, что сказал нам CommonsWare, в моем посте приведен фактический программный код для начала работы.

заявление об отказе: OPs "Спасибо за ваш вклад. Вот как я это представил. Я должен отдать должное ответу ниже" Комментарий не означает мой ответ, но ответ CommonsWare. Stackoverflow изменил порядок размещения заказов.

ответил Whome 12 Jpm1000000pmSat, 12 Jan 2013 23:03:09 +040013 2013, 23:03:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132