如何以编程方式将元素添加到工具栏

4

我正在制作一款具有工具栏向后兼容的应用程序,因此我有了这个文件。

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

然后我通过编程的方式将其添加到视图中,类似于:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

然而,我希望能够将自定义视图添加到工具栏中,例如EditText和TextView等,而不是将它们硬编码到上面的toolbar.xml中。

有没有办法做到这一点?值得注意的是,我正在使用V7支持库。

谢谢, Liam


1
你可以随时将它们添加到XML中,并动态地显示或隐藏它们。 - cyroxis
2个回答

10

请尝试以下操作:

步骤1:在xml文件中向工具栏添加LinearLayout

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <LinearLayout
           android:id=@+id/toolbar_item_container
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="horizontal" />
</android.support.v7.widget.Toolbar>

步骤2:在代码中获取此LinearLayout
Toolbar mToolbar = (Toolbar)findViewById(R.id.toolbar_transaction);
LinearLayout layoutToolbar = (LinearLayout)
                  mToolbar.findViewById(R.id.toolbar_item_container);

步骤3:使用以下代码将视图添加到此LinearLayout并将其删除
layoutToolbar.addView();
layoutToolbar.removeView();

这也可以通过直接向工具栏添加和删除元素来完成,而不需要使用LinearLayout。你可以尝试这两种方法。希望能对你有所帮助。

谢谢!我可以确认这适用于附加到布局和直接附加到工具栏。但是,我似乎只能通过在运行时构建视图来添加视图。有什么办法可以将自定义XML视图填充/附加到工具栏/布局吗? - Liam Kelly
使用我上面提到的相同方法...使用addView方法。并使用LayoutInflater类填充元素。 - ELITE
3
我使用了这段代码:View v = getLayoutInflater().inflate(R.layout.homescreentoolbar, toolbar, false); toolbar.addView(v);,但视图的文本似乎未显示出来。 :/ - Liam Kelly
好的,所有这些代码都适用于线性布局,但是直接添加到工具栏中不会显示。然而,它解决了我的问题并保持了文件的灵活性。 :) - Liam Kelly

0
如果您在XML中没有工具栏,可以通过编程方式设置自定义视图。
    actionBar.setCustomView(R.layout.custom_view);
    View view = actionBar.getCustomView();
    TextView locationTitle = view.findViewById(R.id.tv_custom_toolbar);
    locationTitle.setText("some text");
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setDisplayHomeAsUpEnabled(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接