我想在android中的浮动动作按钮前显示计数徽章。我使用FrameLayout来实现这一目标。我的代码在这里
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/send_button"
android:layout_toLeftOf="@+id/send_button"
android:layout_toStartOf="@+id/send_button"
android:layout_gravity="end|bottom"
android:id="@+id/frameLayout">
<android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/listen_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:backgroundTint="#e3e3e3" />
<TextView
android:id="@+id/textOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:textColor="#FFF"
android:textSize="10sp"
android:textStyle="bold"
android:background="@drawable/badge_circle"
android:layout_gravity="right|bottom"
android:layout_alignBottom="@+id/frameLayout"
android:layout_toLeftOf="@+id/frameLayout"
android:layout_toStartOf="@+id/frameLayout" />
</FrameLayout>
我在FAB下方获得了计数徽章,如下所示
我需要将计数徽章放在FAB前面。
答案 0 :(得分:3)
根据Daniel的建议,您不应该为浮动动作按钮添加徽章。但是,如果您真的必须这样做,请尝试将此属性添加到TextView:
_TEx
答案 1 :(得分:2)
我使用CounterFab library来实现这一目标。
就像将其添加到XML布局文件而不是常规FloatingActionButton
并调用counterFab.setCount(10);
一样简单(请参阅用法示例here)。
答案 2 :(得分:2)
对于此问题,解决方案是android:elevation="7dp"
。但是你正在寻找类似的东西然后使用以下代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_margin="@dimen/margin.2">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_cart"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/margin.2"
app:srcCompat="@drawable/ic_add_shopping_cart"
app:backgroundTint="@color/colorPrimaryDark" />
<TextView
android:id="@+id/text_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="7dp"
android:gravity="center"
android:textColor="@color/white"
android:layout_alignParentRight="true"
android:textSize="@dimen/text.size.small"
android:background="@drawable/bg_fab"
tools:text="10" />
</RelativeLayout>
</RelativeLayout>
答案 3 :(得分:2)
您可以使用材料组件库提供的BadgeDrawable
。
类似的东西:
fab.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
badgeDrawable.setNumber(2);
//Important to change the position of the Badge
badgeDrawable.setHorizontalOffset(30);
badgeDrawable.setVerticalOffset(20);
BadgeUtils.attachBadgeDrawable(badgeDrawable, fab, null);
fab.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
当前(1.3.0-alpha02
)尚无更改半径的方法,但是您可以在项目(dimens.xml
)中覆盖此尺寸:
<dimen name="mtrl_badge_with_text_radius">12dp</dimen>
答案 4 :(得分:1)
可以通过为浮动提供自定义样式来简单地使用TextView
。
<TextView
android:id="@+id/fabCounter"
style="@style/Widget.Design.FloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:padding="5dp"
android:text="10"
android:textColor="@android:color/black"
android:textSize="14sp" />
答案 5 :(得分:0)
尝试一下:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
app:layout_anchor="@+id/containerpager"
app:layout_anchorGravity="bottom|right">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:elevation="0dp"
android:visibility="visible"
app:backgroundTint="@color/colorPrimary"
app:borderWidth="0dp"
app:fabSize="normal"
app:srcCompat="@drawable/ic_review_order" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="5"
android:textColor="@color/white"
android:textSize="22sp"
android:visibility="visible" />
</RelativeLayout>
答案 6 :(得分:0)
您可能想尝试一下
<FrameLayout
android:layout_gravity="bottom|end"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.nex3z.notificationbadge.NotificationBadge
android:id="@+id/badge"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_gravity="right|top"
android:elevation="7dp"
app:nbMaxTextLength="2" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:src="@drawable/ic_shopping_cart_black_24dp"
app:backgroundTint="@color/colorprice" />
</FrameLayout>
答案 7 :(得分:0)
我已经使用约束布局进行了管理,希望对您有所帮助 你们中的任何一个。
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cvFilterBtnFragDiscover"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:visibility="gone">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivFilterFragDiscover"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_filter_recommended"
tools:ignore="ContentDescription" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvConnCountToolbarWithTab"
android:layout_width="@dimen/_8sdp"
android:layout_height="@dimen/_8sdp"
android:background="@drawable/ic_dot"
app:layout_constraintCircle="@+id/ivFilterFragDiscover"
app:layout_constraintCircleAngle="35"
app:layout_constraintCircleRadius="@dimen/_18sdp"
app:layout_constraintStart_toEndOf="@+id/ivFilterFragDiscover"
app:layout_constraintTop_toTopOf="@+id/ivFilterFragDiscover" />
</androidx.constraintlayout.widget.ConstraintLayout>
答案 8 :(得分:-2)
尝试此更改:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:id="@+id/frameLayout">
<android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/listen_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@android:color/transparent"
app:backgroundTint="#e3e3e3" />
<TextView
android:id="@+id/textOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:textColor="#FFF"
android:textSize="10sp"
android:textStyle="bold"
android:background="@drawable/badge_circle"/>
</FrameLayout>