Toolbar功能异常求助:自定义Toolbar布局配置无效
自定义Toolbar布局完整实现方案
嘿,看你折腾好几天想搞定自定义Toolbar的布局,我来给你梳理一套完整的实现步骤,应该能解决你的问题!
第一步:完善自定义Toolbar布局
你给出的代码没写完,我帮你补全成一个实用的示例——比如在Toolbar里加一个居中的自定义标题,同时保留右侧菜单的兼容性:
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="#fff" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <!-- 自定义标题TextView,可根据需求调整位置/样式 --> <TextView android:id="@+id/custom_toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:fontFamily="sans-serif-smallcaps" android:text="我的自定义标题" android:textColor="#333" android:textSize="18sp" /> </android.support.v7.widget.Toolbar>
这里额外加了app:popupTheme,是为了让Toolbar弹出的菜单样式更协调;layout_gravity可以控制自定义View的位置,你也可以加返回图标、右侧按钮等元素扩展布局。
第二步:在Activity中绑定并配置Toolbar
接下来要在Activity里禁用默认ActionBar,把自定义Toolbar替换上去:
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 绑定自定义Toolbar Toolbar toolbar = findViewById(R.id.toolbar); // 替换默认ActionBar setSupportActionBar(toolbar); // 隐藏默认标题(因为我们用了自定义TextView) if (getSupportActionBar() != null) { getSupportActionBar().setDisplayShowTitleEnabled(false); } // 动态修改自定义标题(可选) TextView customTitle = findViewById(R.id.custom_toolbar_title); customTitle.setText("动态更新的标题"); } }
第三步:确保主题配置无冲突
一定要在AndroidManifest.xml里给目标Activity设置不带默认ActionBar的主题:
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> </activity>
对应的styles.xml主题定义:
<style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
关键注意事项
- 布局根节点要添加
app命名空间:xmlns:app="http://schemas.android.com/apk/res-auto",否则app:theme这类属性会报错。 - 如果用AndroidX,把
android.support.v7.widget.Toolbar换成androidx.appcompat.widget.Toolbar,Activity保持继承AppCompatActivity即可。 - 自定义布局和Toolbar菜单可以共存,只需正常重写
onCreateOptionsMenu和onOptionsItemSelected方法就行。
内容的提问来源于stack exchange,提问作者user9025311
相关产品推荐
相关产品推荐

