在对话框中设置工具栏标题

Setting the Toolbar title in a Dialog

我创建了一个带有自定义布局的 Dialog,允许我在对话框中显示带有自定义 objects 的 ListView。我还在 Dialog 中添加了 Toolbar (android.support.v7.widget.Toolbar) 以使其更具实质性。我正在尝试弄清楚如何为 Toolbar 设置标题,但遇到了一些问题。通常我会做类似下面的事情:

myToolbar = (Toolbar) findViewById(R.id.my_toolbar);            
setSupportActionBar(myToolbar);

但是,我不能在我创建的 class 中使用它来构建 Dialog,因为 setSupportActionBar 是一个 ActionBarActivity 方法。我也试过用 setTitle 来指定标题文本,但没有用。

那么,在不使用任何 ActionBarActivity 方法的情况下设置 Toolbar 标题的最佳方法是什么?我的代码如下所示:

Dialog布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/dialog_toolbar"
        android:layout_height="52dp"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary" />

    <ListView
        android:id="@+id/group_listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="5dp"
        android:cacheColorHint="@android:color/transparent"
        android:choiceMode="multipleChoice"
        android:layout_weight="1"
        android:isScrollContainer="false"
        android:divider="@color/grey_300"
        android:dividerHeight="1dip"
        android:fadingEdge="none">
    </ListView>

    <LinearLayout
        android:id="@+id/btnHolderLL"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/dialog_ok_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingRight="1dp"
            android:paddingLeft="1dp"
            android:textSize="17dp"
            android:textColor="#FFFFFF"
            android:textAllCaps="false"
            android:background="@drawable/button_selector"
            android:text="Ok"
            android:clickable="true"/>
    </LinearLayout>

</LinearLayout>

Dialog 建设者 class

public class ListGroup
{
    public static Dialog CreateGroupDialog(Context context, ArrayList<ListObject> arrayList)
    {
        final Dialog dialog = new Dialog(context, R.style.dialogTheme);
        dialog.setContentView(R.layout.group_dialog);
        Button dialogButton = (Button)dialog.findViewById(R.id.dialog_ok_button);
        dialogButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                dialog.dismiss();
            }
        });

        LayoutInflater li = LayoutInflater.from(context);
        View view = li.inflate(R.layout.group_dialog, null);
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.dialog_toolbar);
        // The following line has no effect...
        toolbar.setTitle("List Group");

        dialog.setCancelable(false);
        ListView listView = (ListView) dialog.findViewById(R.id.group_listview);
        CustomAdapter customAdapter = new CustomAdapter(context, R.layout.list_object, arrayList);
        listView.setAdapter(customAdapter);
        return dialog;
    }
}

例如,我会像这样创建一个 Dialog

ArrayList arrayList = new ArrayList<ListObject>();
ListObject listObject1 = new ListObject("Item #1", new String[]{""}, "", "", "", "blank",
        "blank", "blank", "blank", "blank", "blank", "", 1, false, 0, 0, false, false, null, null);
ListObject listObject2 = new ListObject("Item #2", new String[]{""}, "", "", "", "blank",
        "blank", "blank", "blank", "blank", "blank", "", 1, false, 0, 0, false, false, null, null);
ListObject listObject3 = new ListObject("Item #3", new String[]{""}, "", "", "", "blank",
        "blank", "blank", "blank", "blank", "blank", "", 1, false, 0, 0, false, false, null, null);
arrayList.add(listObject1);
arrayList.add(listObject2);
arrayList.add(listObject3);
Dialog groupDialog = ListGroup.CreateGroupDialog(MainActivity.this, null, arrayList);
groupDialog.show();

这将创建如下所示的 Dialog;如您所见,没有标题...

当你使用

 LayoutInflater li = LayoutInflater.from(context);
 View view = li.inflate(R.layout.group_dialog, null);
 Toolbar toolbar = (Toolbar) view.findViewById(R.id.dialog_toolbar);

您正在扩充新布局并引用新的 Toolbar,而不是使用您的对话框使用的布局(您在 dialog.setContentView(R.layout.group_dialog); 中扩充)。类似于您如何在对话框中获得对 Button 的引用,您应该使用以下方法检索工具栏:

Toolbar toolbar = (Toolbar) dialog.findViewById(R.id.dialog_toolbar);