Пользовательский интерфейс справки для уведомлений на иконке
Я хочу разработать следующий интерфейс. Кто-нибудь может дать мне пример или предложить некоторый исходный код для реализации?
5 ответов
Вот проект на Git Hub, показывающий значки на разных предметах, но внутри вашего приложения (т.е. TextView
, TabHost
, ImageView
так далее)
Что касается отображения значка на значке приложения, это невозможно, поскольку это не способ показа уведомлений для Android. Платформа Android поддерживает обработку уведомлений с помощью уведомлений в строке состояния.
Если вы хотите установить значок уведомления в верхнем левом углу, это так же просто, как следующий фрагмент кода:
Bitmap1 должен быть больше, чем bitmap2, и в вашем случае я бы посоветовал ему изображение PNG с прозрачным фоном, чтобы пузырь уведомлений находился за пределами остальной части изображения.
private Bitmap overlay(Bitmap bitmap1, Bitmap bitmap2) {
Bitmap bmOverlay = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bitmap1, new Matrix(), null);
canvas.drawBitmap(bitmap2, new Matrix(), null);
return bmOverlay;
}
В противном случае, если вы хотите его в правом верхнем углу, вам следует попробовать другие спецификации Canvas.drawBitmap.
Например:
canvas.drawBitmap(Bitmap bitmap, float left, float top, Paint paint);
Попробуйте сделать что-то вроде:
private Bitmap overlay(Bitmap bitmap1, Bitmap bitmap2) {
Bitmap bmOverlay = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bitmap1, new Matrix(), null);
canvas.drawBitmap(bitmap2, bitmap1.getWidth()-bitmap2.getWidth(),
0,null);
return bmOverlay;
}
Если все, что вам нужно, это как сделать это в XML, то вы должны создать RelativeLayout, а затем добавить в него оба изображения и выровнять всплывающее уведомление справа. И это должно сработать. Вы бы все равно должны были иметь изображение PNG с прозрачным фоном.
Я надеюсь, что этого будет достаточно для того, что вы хотите сделать.
Вы можете использовать RelativeLayout с двумя детьми, один для значка и один для значка. Значок нуждается в дополнительном заполнении, чтобы значок находился немного за его пределами. Значок располагается на одной линии с parentTop и parentRight.
Вот ваш исходный код для отображения количества значков виджета этого приложения.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dip"
android:focusable="true" >
<ImageView
android:id="@+id/icon"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_marginTop="8dp"
android:background="@drawable/logo"
android:contentDescription="image"
android:scaleType="center" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/icon"
android:gravity="center"
android:paddingLeft="3dp"
android:paddingTop="10dp"
android:shadowColor="#000000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="1.5"
android:text="@string/app_name"
android:textColor="#FFF" />
<TextView
android:id="@+id/txt_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="-10dip"
android:layout_toRightOf="@+id/icon"
android:background="@drawable/badge_count2"
android:contentDescription="badge"
android:gravity="center"
android:text="1"
android:textColor="@color/White"
android:textStyle="bold" />
</RelativeLayout>
а также вам нужен этот нарисованный файл badge_count2.xml.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/red" >
</solid>
<stroke
android:width="2dp"
android:color="#FFFFFF" >
</stroke>
<padding
android:bottom="2dp"
android:left="7dp"
android:right="7dp"
android:top="3dp" />
<corners android:radius="10dp" >
</corners>
Вот простая поддержка библиотеки, доступная на нескольких устройствах, таких как Sony, Samsung, MOTO и т. д.... попробуйте это... это будет работать... я пытался и работает нормально... http://github.com/leolin310148/ShortcutBadger