安卓自定义Toolbar破事

本文介绍如何在Android应用中自定义Toolbar,包括创建XML布局、定义主题样式、在BaseActivity中初始化Toolbar及其控件,并演示了如何在具体Activity中使用这些自定义功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 自定义toolbar XML 文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar_base"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:fitsSystemWindows="true"
    app:navigationIcon="@mipmap/back"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <TextView
        android:id="@+id/toolbar_title"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="66"
        android:textSize="21sp" />

    <TextView
        android:id="@+id/toolbar_menu_title"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="10dp"
        android:text="55"
        android:textSize="16sp" />

</android.support.v7.widget.Toolbar>
navigationIcon为自定义的返回图标
2 定义style 中的Theme
<style name="AppThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <!--<item name="android:windowTranslucentNavigation">false</item>-->
    <!--<item name="android:windowTranslucentStatus">false</item>-->
    <!--<item name="android:background">@null</item>-->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
那三个注释掉的自己尝试下吧
3 在BaseAvtivity 中 找到你自定义的toolbar XML 并找到里面的控件,对外提供get 方法和 setText 方法  随便封,
private Toolbar mToolbar;
//标题
private TextView toolbarTitle;

private TextView toolbarMenuTitle;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(LayoutInjectUtil.getInjectLayoutId(this));
    initToolbars();
}

protected void initToolbars() {
    mToolbar = findViewById(R.id.toolbar_base);
    toolbarTitle = findViewById(R.id.toolbarTitle);
    toolbarMenuTitle = findViewById(R.id.toolbarMenuTitle);
    if (mToolbar != null) {
        setSupportActionBar(mToolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        mToolbar.setOnMenuItemClickListener(this);
    }
}


public Toolbar getmToolbar() {
    return mToolbar;
}

public void setmToolbar(Toolbar mToolbar) {
    this.mToolbar = mToolbar;
}

public TextView getToolbarTitle() {
    return toolbarTitle;
}

public void setToolbarTitle(String toolbarTitle) {
    this.toolbarTitle.setText(toolbarTitle);
}

public TextView getToolbarMenuTitle() {
    return toolbarMenuTitle;
}

public void setToolbarMenuTitle(String toolbarMenuTitle) {
    this.toolbarMenuTitle.setText(toolbarMenuTitle);
}

public void showBack(boolean isShow) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(isShow);
    getSupportActionBar().setDisplayShowHomeEnabled(isShow);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}
}
4 在你的自定义的Activity 中集成你的BaseActivity
//动态设置返回按钮的样式
getmToolbar().setNavigationIcon(R.mipmap.refresh);
//设置toolbar的标题
setToolbarTitle("标题");
//设置toolbar右侧的选项按钮问题
setToolbarMenuTitle("设置");
//设置其点击事件
getToolbarMenuTitle().setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
    }
});
//设置返回按钮的点击事件,!!!!如果未设置会默认触发BaseAvtivity 中的
onOptionsItemSelected 方法 不要试图在子类中重写
onOptionsItemSelected方法,很烦
getmToolbar().setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "6666", Toast.LENGTH_SHORT).show(); }});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值