解决使用BadgeView导致视图显示错误的问题

最近项目中用到了消息通知,就是在头像右上角用一个小红点显示消息数量,在网上查了下有个BadgeView控件,听说还不错,就download了一波,想试用一番。网上的教程很多都只告诉我们怎么使用,而且说得特别简单,但是,自己用的时候回发现各种问题,比如我遇到的“显示效果与局部不符的情况”。后来查阅各种资料,发现是布局的问题,使用BadgeView有个烦人的地方就是,badgeView.setTargetView(view)方法中的view必须是在LinearLayout里面,否则就会出现显示效果与布局严重不符的情况。下面是我的布局代码,
`


<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xfq.test.MainActivity">

    <LinearLayout
        android:layout_width="match_parent" android:layout_height="match_parent">

        <TextView
            android:id="@+id/text" android:layout_width="200dp"
            android:layout_height="100dp" android:layout_marginLeft="50dp"
            android:layout_marginTop="50dp" android:background="#00ff00"
            android:gravity="center" android:text="TextView" />
        <Button
            android:id="@+id/btn" android:layout_width="50dp"
            android:layout_height="wrap_content" android:layout_marginLeft="20dp"
            android:layout_marginTop="50dp" android:layout_toRightOf="@id/text"
            android:text="Button" />
    LinearLayout>
RelativeLayout>

上面的布局中我把TextView写在了LinearLayout里面(跟最外层的RelativeLayout没啥关系),这样就能按我们的布局效果来显示啦!
这是我的Java代码

TextView text = (TextView)findViewById(R.id.text);
        BadgeView badgeView = new BadgeView(this);
        badgeView.setTargetView(text);
        badgeView.setBackgroundResource(R.mipmap.aii);
//        badgeView.setBadgeGravity(Gravity.LEFT|Gravity.TOP);
//        badgeView.setBadgeGravity(Gravity.RIGHT|Gravity.BOTTOM);
        badgeView.setBadgeGravity(Gravity.CENTER);
//        badgeView.setBadgeGravity(Gravity.CENTER_HORIZONTAL);
        badgeView.setBadgeCount(3);

我将badgeView绑定在TextView上了。

你可能感兴趣的:(Android)