b2c信息网

您现在的位置是:首页 > 昨日新闻 > 正文

昨日新闻

android桌面角标源码(android 角标)

hacker2022-06-10 01:44:25昨日新闻87
本文目录一览:1、android角标红点怎么设置

本文目录一览:

android 角标红点怎么设置

角标实现

要实现这个角标:

1、放置一个隐藏的图片在app中,在需要它显示的时候,显示该图片,并以该图片为背景,显示新增消息数;

2、自定义一个控件,用于显示该角标信息。例如,角标相对于控件的位置、底色、数字等;

对比或者使用后,你会发现,自定义一个控件,无疑更符合我们的使用习惯。无需特定的图片,减少了app的大小等,更重要的是,这样方便我们的使用。

在角标实现中,有个开源代码BadgeView写的很符合我们的心理预期。实现了我们常用的所有功能。

BadgeView

这是一个继承TextView控件,自定义而成的一个简单控件。我们通过它,可轻易实现对角标位置、角标底色、角标内容等控制。

package com.readystatesoftware.viewbadger;

import android.content.Context;

import android.content.res.Resources;

import android.graphics.Color;

import android.graphics.Typeface;

import android.graphics.drawable.ShapeDrawable;

import android.graphics.drawable.shapes.RoundRectShape;

import android.util.AttributeSet;

import android.util.TypedValue;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.view.ViewParent;

import android.view.animation.AccelerateInterpolator;

import android.view.animation.AlphaAnimation;

import android.view.animation.Animation;

import android.view.animation.DecelerateInterpolator;

import android.widget.FrameLayout;

import android.widget.TabWidget;

import android.widget.TextView;

/**

 * A simple text label view that can be applied as a "badge" to any given {@link android.view.View}. 

 * This class is intended to be instantiated at runtime rather than included in XML layouts.

 * 

 * @author Jeff Gilfelt

 */

public class BadgeView extends TextView {

public static final int POSITION_TOP_LEFT = 1;

public static final int POSITION_TOP_RIGHT = 2;

public static final int POSITION_BOTTOM_LEFT = 3;

public static final int POSITION_BOTTOM_RIGHT = 4;

public static final int POSITION_CENTER = 5;

private static final int DEFAULT_MARGIN_DIP = 5;

private static final int DEFAULT_LR_PADDING_DIP = 5;

private static final int DEFAULT_CORNER_RADIUS_DIP = 8;

private static final int DEFAULT_POSITION = POSITION_TOP_RIGHT;

private static final int DEFAULT_BADGE_COLOR = Color.parseColor("#CCFF0000"); //Color.RED;

private static final int DEFAULT_TEXT_COLOR = Color.WHITE;

private static Animation fadeIn;

private static Animation fadeOut;

private Context context;

private View target;

private int badgePosition;

private int badgeMarginH;

private int badgeMarginV;

private int badgeColor;

private boolean isShown;

private ShapeDrawable badgeBg;

private int targetTabIndex;

public BadgeView(Context context) {

this(context, (AttributeSet) null, android.R.attr.textViewStyle);

}

public BadgeView(Context context, AttributeSet attrs) {

 this(context, attrs, android.R.attr.textViewStyle);

}

/**

     * Constructor -

     * 

     * create a new BadgeView instance attached to a target {@link android.view.View}.

     *

     * @param context context for this view.

     * @param target the View to attach the badge to.

     */

public BadgeView(Context context, View target) {

 this(context, null, android.R.attr.textViewStyle, target, 0);

}

/**

     * Constructor -

     * 

     * create a new BadgeView instance attached to a target {@link android.widget.TabWidget}

     * tab at a given index.

     *

     * @param context context for this view.

     * @param target the TabWidget to attach the badge to.

     * @param index the position of the tab within the target.

     */

public BadgeView(Context context, TabWidget target, int index) {

this(context, null, android.R.attr.textViewStyle, target, index);

}

public BadgeView(Context context, AttributeSet attrs, int defStyle) {

this(context, attrs, defStyle, null, 0);

}

public BadgeView(Context context, AttributeSet attrs, int defStyle, View target, int tabIndex) {

super(context, attrs, defStyle);

init(context, target, tabIndex);

}

private void init(Context context, View target, int tabIndex) {

this.context = context;

this.target = target;

this.targetTabIndex = tabIndex;

// apply defaults

badgePosition = DEFAULT_POSITION;

badgeMarginH = dipToPixels(DEFAULT_MARGIN_DIP);

badgeMarginV = badgeMarginH;

badgeColor = DEFAULT_BADGE_COLOR;

setTypeface(Typeface.DEFAULT_BOLD);

int paddingPixels = dipToPixels(DEFAULT_LR_PADDING_DIP);

setPadding(paddingPixels, 0, paddingPixels, 0);

setTextColor(DEFAULT_TEXT_COLOR);

fadeIn = new AlphaAnimation(0, 1);

fadeIn.setInterpolator(new DecelerateInterpolator());

fadeIn.setDuration(200);

fadeOut = new AlphaAnimation(1, 0);

fadeOut.setInterpolator(new AccelerateInterpolator());

fadeOut.setDuration(200);

isShown = false;

if (this.target != null) {

applyTo(this.target);

} else {

show();

}

}

private void applyTo(View target) {

LayoutParams lp = target.getLayoutParams();

ViewParent parent = target.getParent();

FrameLayout container = new FrameLayout(context);

if (target instanceof TabWidget) {

// set target to the relevant tab child container

target = ((TabWidget) target).getChildTabViewAt(targetTabIndex);

this.target = target;

((ViewGroup) target).addView(container, 

new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

this.setVisibility(View.GONE);

container.addView(this);

} else {

// TODO verify that parent is indeed a ViewGroup

ViewGroup group = (ViewGroup) parent; 

int index = group.indexOfChild(target);

group.removeView(target);

group.addView(container, index, lp);

container.addView(target);

this.setVisibility(View.GONE);

container.addView(this);

group.invalidate();

}

}

/**

     * Make the badge visible in the UI.

     * 

     */

public void show() {

show(false, null);

}

/**

     * Make the badge visible in the UI.

     *

     * @param animate flag to apply the default fade-in animation.

     */

public void show(boolean animate) {

show(animate, fadeIn);

}

/**

     * Make the badge visible in the UI.

     *

     * @param anim Animation to apply to the view when made visible.

     */

public void show(Animation anim) {

show(true, anim);

}

/**

     * Make the badge non-visible in the UI.

     * 

     */

public void hide() {

hide(false, null);

}

/**

     * Make the badge non-visible in the UI.

     *

     * @param animate flag to apply the default fade-out animation.

     */

public void hide(boolean animate) {

hide(animate, fadeOut);

}

/**

     * Make the badge non-visible in the UI.

     *

     * @param anim Animation to apply to the view when made non-visible.

     */

public void hide(Animation anim) {

hide(true, anim);

}

/**

     * Toggle the badge visibility in the UI.

     * 

     */

public void toggle() {

toggle(false, null, null);

}

/**

     * Toggle the badge visibility in the UI.

     * 

     * @param animate flag to apply the default fade-in/out animation.

     */

public void toggle(boolean animate) {

toggle(animate, fadeIn, fadeOut);

}

/**

     * Toggle the badge visibility in the UI.

     *

     * @param animIn Animation to apply to the view when made visible.

     * @param animOut Animation to apply to the view when made non-visible.

     */

public void toggle(Animation animIn, Animation animOut) {

toggle(true, animIn, animOut);

}

private void show(boolean animate, Animation anim) {

if (getBackground() == null) {

if (badgeBg == null) {

badgeBg = getDefaultBackground();

}

setBackgroundDrawable(badgeBg);

}

applyLayoutParams();

if (animate) {

this.startAnimation(anim);

}

this.setVisibility(View.VISIBLE);

isShown = true;

}

private void hide(boolean animate, Animation anim) {

this.setVisibility(View.GONE);

if (animate) {

this.startAnimation(anim);

}

isShown = false;

}

private void toggle(boolean animate, Animation animIn, Animation animOut) {

if (isShown) {

hide(animate  (animOut != null), animOut);

} else {

show(animate  (animIn != null), animIn);

}

}

/**

     * Increment the numeric badge label. If the current badge label cannot be converted to

     * an integer value, its label will be set to "0".

     * 

     * @param offset the increment offset.

     */

public int increment(int offset) {

CharSequence txt = getText();

int i;

if (txt != null) {

try {

i = Integer.parseInt(txt.toString());

} catch (NumberFormatException e) {

i = 0;

}

} else {

i = 0;

}

i = i + offset;

setText(String.valueOf(i));

return i;

}

/**

     * Decrement the numeric badge label. If the current badge label cannot be converted to

     * an integer value, its label will be set to "0".

     * 

     * @param offset the decrement offset.

     */

public int decrement(int offset) {

return increment(-offset);

}

private ShapeDrawable getDefaultBackground() {

int r = dipToPixels(DEFAULT_CORNER_RADIUS_DIP);

float[] outerR = new float[] {r, r, r, r, r, r, r, r};

        

RoundRectShape rr = new RoundRectShape(outerR, null, null);

ShapeDrawable drawable = new ShapeDrawable(rr);

drawable.getPaint().setColor(badgeColor);

return drawable;

}

private void applyLayoutParams() {

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

switch (badgePosition) {

case POSITION_TOP_LEFT:

lp.gravity = Gravity.LEFT | Gravity.TOP;

lp.setMargins(badgeMarginH, badgeMarginV, 0, 0);

break;

case POSITION_TOP_RIGHT:

lp.gravity = Gravity.RIGHT | Gravity.TOP;

lp.setMargins(0, badgeMarginV, badgeMarginH, 0);

break;

case POSITION_BOTTOM_LEFT:

lp.gravity = Gravity.LEFT | Gravity.BOTTOM;

lp.setMargins(badgeMarginH, 0, 0, badgeMarginV);

break;

case POSITION_BOTTOM_RIGHT:

lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;

lp.setMargins(0, 0, badgeMarginH, badgeMarginV);

break;

case POSITION_CENTER:

lp.gravity = Gravity.CENTER;

lp.setMargins(0, 0, 0, 0);

break;

default:

break;

}

setLayoutParams(lp);

}

/**

     * Returns the target View this badge has been attached to.

     * 

     */

public View getTarget() {

return target;

}

/**

     * Is this badge currently visible in the UI?

     * 

     */

@Override

public boolean isShown() {

return isShown;

}

/**

     * Returns the positioning of this badge.

     * 

     * one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER.

     * 

     */

public int getBadgePosition() {

return badgePosition;

}

/**

     * Set the positioning of this badge.

     * 

     * @param layoutPosition one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER.

     * 

     */

public void setBadgePosition(int layoutPosition) {

this.badgePosition = layoutPosition;

}

/**

     * Returns the horizontal margin from the target View that is applied to this badge.

     * 

     */

public int getHorizontalBadgeMargin() {

return badgeMarginH;

}

/**

     * Returns the vertical margin from the target View that is applied to this badge.

     * 

     */

public int getVerticalBadgeMargin() {

return badgeMarginV;

}

/**

     * Set the horizontal/vertical margin from the target View that is applied to this badge.

     * 

     * @param badgeMargin the margin in pixels.

     */

public void setBadgeMargin(int badgeMargin) {

this.badgeMarginH = badgeMargin;

this.badgeMarginV = badgeMargin;

}

/**

     * Set the horizontal/vertical margin from the target View that is applied to this badge.

     * 

     * @param horizontal margin in pixels.

     * @param vertical margin in pixels.

     */

public void setBadgeMargin(int horizontal, int vertical) {

this.badgeMarginH = horizontal;

this.badgeMarginV = vertical;

}

/**

     * Returns the color value of the badge background.

     * 

     */

public int getBadgeBackgroundColor() {

return badgeColor;

}

/**

     * Set the color value of the badge background.

     * 

     * @param badgeColor the badge background color.

     */

public void setBadgeBackgroundColor(int badgeColor) {

this.badgeColor = badgeColor;

badgeBg = getDefaultBackground();

}

private int dipToPixels(int dip) {

Resources r = getResources();

float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics());

return (int) px;

}

}

如何关闭android 应用角标

设置

应用管理

已安装

找到带有角标的应用

找到通知管理

找到在桌面图标上显示角标,关闭即可

android 微信 角标 怎么实现

是桌面角标吗 ,如果是桌面角标每个厂家的定制系统不同需要系统厂商提供的API方法,小米、华为、三星都用自己的调用方法,以小米为例:

NotificationManager mNotificationManager = (NotificationManager) this

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification.Builder builder = new Notification.Builder(this)

.setContentTitle(“title”).setContentText(“text”).setSmallIcon(R.drawable.icon);

Notification notification = builder.build();

try {

Field field = notification.getClass().getDeclaredField(“extraNotification”);

Object extraNotification = field.get(notification);

Method method = extraNotification.getClass().getDeclaredMethod(“setMessageCount”, int.class);

method.invoke(extraNotification, mCount);

} catch (Exception e) {

e.printStackTrace();

}

mNotificationManager.notify(0,notification);

参考地址:

怎么用代码修改一个android应用程序在桌面的图标

代码修改一个android应用程序在桌面的图标,参考如下内容:

private static final String ACTION_INSTALL_SHORTCUT =

"com.android.launcher.action.INSTALL_SHORTCUT";

static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate";

Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT);

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,

getString(R.string.app_name));

shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false);

Intent intent2 = new Intent(Intent.ACTION_MAIN);

intent2.addCategory(Intent.CATEGORY_LAUNCHER);

intent2.setComponent(new ComponentName(this.getPackageName(),

".Main"));

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,

Intent.ShortcutIconResource.fromContext(this,

R.drawable.icon)); //可以修改icon的值

sendBroadcast(shortcutIntent);

不过简单一点的是在主配置文件里面进行更改,重新打包即可。

Android桌面角标提醒功能

您好!

QQ是没有显示消息数字提醒的哦,这个是不能设置的。

如果有任何问题可以随时来咨询我们的。非常感谢您对我们vivo的支持,祝您生活愉快!

(开发)android 桌面app图标右上角消息数字提示 效果如何实现。

Android目前没法动态改动图标,至少我不知道,通知都是在通知栏体现的,这个相对来说比较简单,在内存中绘制一个图标,然后显示在通知栏就可以了。总之,按照Android实现的原理,我认为这个桌面图标附带动态变化,是没法实现的,比较正统的方法还是在通知栏做文章,毕竟通知栏,顾名思义,就是用来显示通知的。

发表评论

评论列表

  • 辙弃慵挽(2022-06-10 02:29:20)回复取消回复

    elerateInterpolator;import android.view.animation.AlphaAnimation;import android.view.animation.Ani

  • 怎忘栖迟(2022-06-10 09:33:33)回复取消回复

    本文目录一览:1、android 角标红点怎么设置2、如何关闭android 应用角标3、android 微信 角标 怎么实现4、怎么用代码修改一个android应用程序在桌面的图标5、And

  • 北槐朻安(2022-06-10 05:37:03)回复取消回复

    @param animate flag to apply the default fade-in/out animation.     */ public void toggle(boolean anim

  • 青迟常安(2022-06-10 05:59:32)回复取消回复

    geColor = DEFAULT_BADGE_COLOR; setTypeface(Typeface.DEFAULT_BOLD); int paddingPixels = dipToPixels(DEFAULT_LR_PADDING_DIP); se

  • 莣萳玖橘(2022-06-10 13:01:31)回复取消回复

    己的调用方法,以小米为例:NotificationManager mNotificationManager = (NotificationManager) this.get