Android:是否可以使用数字更新ImageView/ImageButton以显示新消息的数量?

San*_*ana 11 android android-notifications android-imageview

在iOS中,我们有一个功能,通过在图标的右上角显示一个小数字来更新应用程序图标和用户的新待处理消息,同样我想知道我们是否有更新ImageView/ImageButton的方法在android(这里我不想更新主屏幕上的图标,但在我的应用程序内).

例如,图片显示红色背景图标,其中待处理的消息数量以红色显示,如果没有消息则显示为灰色背景.

在此输入图像描述

谢谢,

cch*_*son 20

我对此感兴趣,因为我不知道如何做到这一点.所以我开始研究它,这就是我如何做到的.

  • 我不是UI的专家,因此在以下XML中可能存在一些无用/错误的东西.
  • 从我上面所说的,我没有设法在图标的右下角.:)
  • 为了测试,我使用icon.pngsdk中的标准

RES /抽拉/ shapecount.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <corners android:radius="20dp"  />    
  <solid android:color="#ff2233" />
</shape>
Run Code Online (Sandbox Code Playgroud)

RES /布局/ my_widget_layout.xml

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

<RelativeLayout
    android:orientation="vertical"
    android:background="@null"
    android:id="@+id/rlayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <ImageView 
            android:id="@+id/icon"
            android:src="@drawable/icon" 
            android:layout_margin="0dp"
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content"/>

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="50" android:textSize="9dp" android:textStyle="bold"  
        android:background="@drawable/shapecount"
        android:textColor="#FFFFFF"
        android:paddingLeft="3dp" android:paddingRight="3dp"
            android:layout_margin="0dp"
        android:layout_alignBottom="@+id/rlayout"
        android:id="@+id/txtCount" />

</RelativeLayout>

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:text="My App Name" android:textSize="9dp" android:textStyle="bold"  
    android:background="@drawable/shapecount"
    android:textColor="#FFFFFF"
    android:paddingLeft="3dp" android:paddingRight="3dp"
        android:layout_margin="0dp"
    android:layout_alignBottom="@+id/rlayout"
    android:id="@+id/txtAppName" />
 </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

主窗口小部件实际上是一个普通视图,您可以像在活动中一样在XML文件中构建.但是有一些规则要遵循.请参阅此链接以获取指南

在此链接中显示如何构建AppWidget,您可以看到以下代码:

// Get the layout for the App Widget and attach an on-click listener to the button
  RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
Run Code Online (Sandbox Code Playgroud)

R.layout.appwidget_provider_layout你的家庭小部件的布局在哪里my_widget_layout.xml

从那里views,您可以为任何计数文本视图设置所需的值:

int count = 50;//Or whatever value you set to it.
views.setTextViewText(R.id.txtCount,Integer.toString(count));
Run Code Online (Sandbox Code Playgroud)

然后你只需更新小部件本身:

appWidgetManager.updateAppWidget(appWidgetId, views);
Run Code Online (Sandbox Code Playgroud)

注意:

所述updatePeriodMillis犯规允许插件请求更新一次以上,每30分钟,以便予使用广播接收器和服务的组合

编辑:

如果您想要的计数应该在a Activity而不是a 之内,请参见下面的活动测试AppWidget.它使用与上面相同的XML:

public class TestActivity extends Activity {
    /** Called when the activity is first created. */

    final Random gen = new Random();


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final TextView t = (TextView) findViewById(R.id.txtCount);

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() { 
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        int a = gen.nextInt(20);
                        t.setText(Integer.toString(a));                     
                    }
                });
                }
            }
        ,new Date(), 3000L);
    }
}
Run Code Online (Sandbox Code Playgroud)