Android PopupWindow со стрелкой всплывающей подсказки

Я видел много вопросов об удалении границы PopupWindow путем передачи null или new Drawable() в setBackgroundDrawable(). У меня обратная проблема. Мне нужна рамка вокруг моего PopupWindow, желательно со стрелкой всплывающей подсказки, указывающей на мой якорь. В настоящее время у моего PopupWindow нет границы. Я пытался настроить поля, фон в xml, ширину и высоту строк макета, списка и списка безрезультатно. Может кто-нибудь, пожалуйста, помогите мне получить рамку и изображение сверху? Я пытаюсь придерживаться Android SDK с этим.

popup_menu_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:orientation="vertical" >

    <com.github.jeremiemartinez.refreshlistview.RefreshListView
        android:id="@+id/popup_menu_list_listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/color_white" />

</LinearLayout>

Ява

private void displayPopupMenu() {
        LayoutInflater layoutInflater = getLayoutInflater();
        View popupView = layoutInflater.inflate(R.layout.popup_menu_list, null);        
        final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);       
        RefreshListView myListView = (RefreshListView) popupView.findViewById(R.id.popup_menu_list_listview);       
        mAdapter = new myAdapter(this, getAdapterData());       
        myListView.setAdapter(mAdapter);            
        popupWindow.showAsDropDown(mMyAnchor);      
    }

Я просто взял их в качестве примеров, но я хочу что-то вроде этого, где всплывающее окно указывает на привязку:

введите здесь описание изображения

Но я получаю что-то вроде этого:

введите здесь описание изображения


person Lee    schedule 09.01.2014    source источник
comment
Отредактировано с примером желаемого вида PopupWindow   -  person Lee    schedule 16.01.2014


Ответы (7)


В Маркете доступно множество библиотек и кодов. Ссылки даны ниже:

Это шаблон пользовательского интерфейса QuickAction. Взгляни на:

  1. QuickAction-Dialog

  2. Quick-action-pattern-in-Android

  3. Всплывающие окна справки в стиле Chrome

Другой альтернативой могут быть «супер-подсказки»:

https://github.com/nhaarman/supertooltips

Вот демо:

https://play.google.com/store/apps/details?id=com.haarman.supertooltips

Из этой первой ссылки/примера выглядит как изображение ниже. Это всего лишь демонстрации, но вы можете настроить их в соответствии с вашими требованиями.

введите здесь описание изображения

person M D    schedule 16.01.2014
comment
Сэр, ссылка, которую вы дали, говорит о зависимости от eclipse - person ; 02.05.2014
comment
github.com/nhaarman/supertooltips Это ссылка, которую я не знаю, как добавить зависимость - person ; 02.05.2014
comment
@tushar.narang сначала вам нужно добавить эту библиотеку в свою рабочую область, а затем ссылаться на библиотеку в своем проекте. - person M D; 02.05.2014
comment
Сэр, я относительно новый, можете ли вы дать мне ссылку, чтобы сделать это - person ; 02.05.2014
comment
Для SuperToolTip убедитесь, что он находится внутри RelativeLayout, а не LinearLayout. - person Alaa M.; 08.12.2016
comment
жаль, что это больше не отслеживается - person spy; 07.01.2017
comment
Да, это репо «Снято с производства». Есть ли что-нибудь более новое для текущих версий Android или в официальной библиотеке Google? - person androidguy; 07.03.2017

Если вы ищете простую библиотеку, я создал ее на основе PopupWindow.

https://github.com/douglasjunior/android-simple-tooltip

Demo

person Douglas Nassif Roma Junior    schedule 12.05.2016
comment
Привет, @Douglas Nassif Roma Junior, я проверил вашу библиотеку, она великолепна. Не могли бы вы рассказать мне, как я могу заставить его работать в диалоге. Спасибо - person Rahul Khurana; 25.04.2017
comment
В текущей версии примера проекта есть пример использования диалоговых окон. Отн. ="nofollow noreferrer">Посмотрите - person Douglas Nassif Roma Junior; 25.04.2017
comment
Привет, он отлично работает для API 26, но показывает всплывающую подсказку в неправильном месте на экране для API ниже 26. Не могли бы вы предложить возможную причину или исправить это? - person Surendra Kumar; 20.11.2018
comment
См. известные проблемы. - person Douglas Nassif Roma Junior; 24.01.2019

Вы можете просто использовать PopupWindow с представлением с векторным фоном:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="20dp"
    android:viewportHeight="162"
    android:viewportWidth="196">
    <path
        android:fillColor="@color/black"
        android:pathData="M0 26.9917C0 12.0846 12.09433 0 26.99583 0L169.0042 0C183.9136 0 196 12.09104 196 26.9917L196 100.0083C196 114.9154 183.9057 127 169.0042 127L124 127L98.5 162L73 127L26.99583 127C12.08644 127 0 114.909 0 100.0083L0 26.9917" />
</vector>
person Andoctorey    schedule 28.04.2017
comment
Не могли бы вы опубликовать такое же векторное изображение, но со стрелкой вверх - person Priyanka Madgundi; 14.04.2018

Более подробный ответ можно найти по адресу https://github.com/florent37/ViewTooltip?utm_source=android-arsenal.com&utm_medium=referral&utm_campaign=5878, который позволяет вам управлять многими вещами, включая направление взгляда. Обсуждение и некоторые методы можно найти здесь.

Изменить: Вот пример gif: введите здесь описание изображения

person Jacolack    schedule 15.08.2018
comment
gradle не может его скомпилировать - person ravid rinek; 14.10.2018
comment
Хорошо работает для позиции BOTTOM, но не работает для позиции TOP. - person Surendra Kumar; 02.01.2019

Для Android 8.0 (уровень API 26) или выше вы можете использовать:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:tooltipText="Send an email" />

И в вашем коде:

// Kotlin
val fab: FloatingActionButton = findViewById(R.id.fab)
fab.tooltipText = "Some tooltip"
// Java
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setTooltipText("Some tooltip");
person Nathan Getachew    schedule 04.06.2020

https://github.com/skydoves/Balloon

Эта библиотека предоставляет легкие всплывающие подсказки, полностью настраиваемые со стрелками и анимацией. 100% Kotlin со всей необходимой документацией. Он также активно управляется.

Вот несколько гифок с их страницы;

е

Другая,

е

person Sabeeh    schedule 24.02.2021

Вы можете создать свою собственную всплывающую подсказку, используя только xml. Я написал демонстрацию https://github.com/nidhinek/android-tooltip на основе PopupWindow.

person Nidhin    schedule 13.03.2017