在iOS中,我们有一项功能,通过在图标的右上角显示一个小数字来更新应用程序图标以及用户的新待处理消息,同样我想知道我们是否有更新方法android中的ImageView / ImageButton(这里我不是要更新主屏幕上的图标,而是在我的应用程序内部。)
例如,图片显示红色背景图标,其中待处理的消息数量以红色显示,如果没有消息则以灰色背景显示。
谢谢,
答案 0 :(得分:20)
我对此感兴趣,因为我不知道如何做到这一点。所以我开始研究它,我就是这样做的。
icon.png
的 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>
<强> 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>
主窗口小部件实际上是一个普通视图,您可以像在活动中一样在XML文件中构建。但是有一些规则要遵循。有关指南,请参阅此link
在这个link中,它向您展示了如何构建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);
其中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));
然后你只需更新小部件本身:
appWidgetManager.updateAppWidget(appWidgetId, views);
注:
updatePeriodMillis不允许小部件每30分钟多次请求更新,因此我使用BroadcastReceiver和Service的组合
编辑:
如果您想要的计数应该在Activity
而不是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);
}
}
答案 1 :(得分:0)
当你想在你的应用程序内部而不是在主屏幕上执行此操作时,我建议您只创建一个ImageView子类,并覆盖onDraw() - 执行任何背景绘制,调用super.onDraw(),然后做前景画。
或者,您可以使用Bitmap.copy等从基本图标构建合成图像,并使用带有消息计数的较小位图。
希望这有帮助,
Phil Lello