加粗样式带角标的菜单图标

创建一个自定义xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/nav_iv_icon"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@string/app_name"
android:paddingLeft="@dimen/lay_2"
android:paddingRight="@dimen/lay_2"
android:paddingTop="@dimen/lay_2"
android:scaleType="fitCenter"
android:src="@drawable/tab_icon_new" />
<TextView
android:id="@+id/nav_tv_dot"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_gravity="top|center"
android:layout_marginLeft="@dimen/lay_8"
android:background="@drawable/ic_red_dot"
android:gravity="center"
android:lines="1"
android:minWidth="14dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="@dimen/font_10"
android:visibility="gone"
tools:text="1"
tools:visibility="visible" />
</FrameLayout>
<TextView
android:id="@+id/nav_tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginTop="1dp"
android:gravity="center"
android:textColor="@drawable/primarybar_txt"
android:textSize="12sp"
tools:text="消息" />
</LinearLayout>
自定义按钮
package com.sanshi.housingAssetsLease.custom.customlayout;
import android.content.Context;
import android.os.Build;
import android.support.annotation.DrawableRes;
import android.support.annotation.RequiresApi;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.sanshi.housingAssetsLease.R;
public class NavigationButton extends FrameLayout {
private Fragment mFragment = null;
private Class<?> mClx;
private ImageView mIconView;
private TextView mTitleView;
private TextView mDot;
private String mTag;
public NavigationButton(Context context) {
super(context);
init();
}
public NavigationButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public NavigationButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public NavigationButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.layout_nav_item, this, true);
mIconView = (ImageView) findViewById(R.id.nav_iv_icon);
mTitleView = (TextView) findViewById(R.id.nav_tv_title);
mDot = (TextView) findViewById(R.id.nav_tv_dot);
}
public void setSelected(boolean selected) {
super.setSelected(selected);
mIconView.setSelected(selected);
mTitleView.setSelected(selected);
}
public void showRedDot(int count) {
mDot.setVisibility(count > 0 ? VISIBLE : GONE);
mDot.setText(String.valueOf(count));
}
public void init(@DrawableRes int resId, @StringRes int strId, Class<?> clx) {
mIconView.setImageResource(resId);
mTitleView.setText(strId);
mClx = clx;
mTag = mClx.getName();
}
public Class<?> getClx() {
return mClx;
}
public Fragment getFragment() {
return mFragment;
}
public void setFragment(Fragment fragment) {
this.mFragment = fragment;
}
public String getTag() {
return mTag;
}
}
使用布局
<main.customlayout.NavigationButton
android:id="@+id/nv_index"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
nvInfo.init(R.drawable.main_info_selector, R.string.nv_info, InfoListNewFragment.class);
nvInfo.showRedDot(99);