关闭

模仿模仿微信收到新的信息时,图标里有小原点

标签: 需求
374人阅读 评论(0) 收藏 举报

这是一个模仿微信下面导航的一个demo,大神们清喷,求指教。

需求:收到新的收消息后,图标下有提示的小红点

说一个我的思路:1.在LinearLayout 里有三个FrameLayout布局

<FrameLayout
    android:id="@+id/message"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:orientation="vertical" >
        <ImageView
            android:id="@+id/message_imgv"
            android:layout_width="@dimen/dp_30"
            android:layout_height="@dimen/dp_30"
            android:layout_marginTop="2dp"
            android:src="@drawable/selector_message" >
        </ImageView>
        <TextView
        android:id="@+id/messagetext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:button="@null"
        android:gravity="center"
        android:textColor="@drawable/radio_text"
        android:text="信息"></TextView>
    </LinearLayout>
    <TextView
        android:id="@+id/hint"
        android:layout_width="@dimen/dp_14"
        android:layout_height="@dimen/dp_14"
        android:layout_gravity="top|center"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="2dp"
        android:background="@drawable/tab_msgnum_textbg"
        android:textSize="8sp"
        android:gravity="center"
        android:textColor="#FFFFFF"
        android:visibility="visible"/>
</FrameLayout>
这是其中一项


实现起来是这个样的,但是在软件中我们不能让他每时每刻都显示,必须按照需求来。

那么我的方法是接受到新的信息就发一个本地广播

@Override
public void updaUI(List<MessageResult> result) {
    if (this.list != null)list.clear();
    this.list = result;
    int i = 0;
    if (list != null && list.size()>0){
        for (MessageResult mag:list) {
            //判断是否收到新的消息
            if (mag.getRead().equals("0")){
                i++;
            }
        }
    }
    if (i > 0){
        LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent(Constants.ACTION_IMAGE_MESSAGE).putExtra("id",1).putExtra("num",i));
    }else {
        LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent(Constants.ACTION_IMAGE_MESSAGE).putExtra("id",2));
    }
    adapter = new MessageAdapter(getContext(),this.list);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);
    listView.setOnItemLongClickListener(this);
}
到主页面接收

IntentFilter intentFilter = new IntentFilter(Constants.ACTION_ENTER_HOME);
LocalBroadcastManager.getInstance(this).registerReceiver(message_br, intentFilter);
控件Textview的显示

private BroadcastReceiver message_br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int i = intent.getIntExtra("id",0);
        if (i == 1){
            hint_tv.setText(intent.getStringExtra("num"));
            hint_tv.setVisibility(View.VISIBLE);
        }else if (i == 2){
            hint_tv.setVisibility(View.INVISIBLE);
        }
    }
};
记得关闭页面时取消广播

@Override
protected void onDestroy() {
    super.onDestroy();
    ButterKnife.unbind(this);
    LocalBroadcastManager.getInstance(this).unregisterReceiver(message_br);
}
搞掂!

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:465次
    • 积分:25
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档