在对话框中设置工具栏标题
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);
我创建了一个带有自定义布局的 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);