我正在尝试使用android-support-v7:21库创建简单的应用程序。
代码片段:
MainActivity.java
public class MainActivity extends ActionBarActivity {
Toolbar mActionBarToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("My title");
setSupportActionBar(mActionBarToolbar);
}
activity_main.xml中
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_actionbar"
android:background="@null"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:fitsSystemWindows="true" />
</LinearLayout>
但是,工具栏上显示的不是“我的标题”,而是显示应用程序名称%
似乎setTitle
方法没有效果
我想展示“我的头衔”。
UPD:
之前,styles.xml
是:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="windowActionBar">false</item>
</style>
所以,我认为没有使用动作栏。
我将NoActionBar
添加到样式父级:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="windowActionBar">false</item>
</style>
但问题没有解决。
答案 0 :(得分:519)
找到解决方案:
而不是:
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("My title");
setSupportActionBar(mActionBarToolbar);
我用过:
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My title");
它有效。
答案 1 :(得分:107)
对于需要在设置SupportActionBar后设置标题通过工具栏的任何人,请阅读此内容。
支持库的内部实现只是检查工具栏在设置SupportActionBar时是否具有标题(非空)。如果有,则使用此标题代替窗口标题。然后,您可以在加载实际标题时设置虚拟标题。
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("");
setSupportActionBar(mActionBarToolbar);
...后
mActionBarToolbar.setTitle(title);
答案 2 :(得分:70)
上述答案完全正确,但对我不起作用。
我用以下方法解决了我的问题。
实际上我的XML就是这样:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/confirm_order_mail_layout"
android:layout_width="match_parent"
android:layout_height="fill_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/confirm_order_appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/confirm_order_list_collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|enterAlways">
<android.support.v7.widget.Toolbar
android:id="@+id/confirm_order_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
我已经尝试了所有选项,毕竟我刚删除了CollapsingToolbarLayout
,因为我不需要在特定的XML
中使用所以我的最终XML 就像:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/confirm_order_mail_layout"
android:layout_width="match_parent"
android:layout_height="fill_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/confirm_order_appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/confirm_order_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
现在你必须像上面的回答一样使用setTitle()
:
mActionBarToolbar = (Toolbar) findViewById(R.id.confirm_order_toolbar_layout);
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My Title");
现在,如果您想同时使用CollapsingToolbarLayout
和Toolbar
,则必须使用setTitle()
的{{1}}
CollapsingToolbarLayout
愿它能帮到你。谢谢。
答案 3 :(得分:33)
只需使用
更改任何活动名称即可Acitivityname.this.setTitle("Title NAme");
答案 4 :(得分:31)
试试这个,你可以直接用XML定义标题:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:title="some title"
app:popupTheme="@style/AppTheme.PopupOverlay">
答案 5 :(得分:13)
设置每个Navbar片段标题的标题
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
myView = inflater.inflate(R.layout.second_layout, container, false);
getActivity().setTitle("title");
return myView;
}
答案 6 :(得分:11)
试试这个..这个方法对我有用.. !!希望它可以帮助某人.. !!
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:text="Toolbar Title"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold" />
</android.support.v7.widget.Toolbar>
要在工具栏中显示徽标,请尝试以下代码段。 //设置drawable
toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));
让我知道结果。
答案 7 :(得分:10)
getSupportActionBar().setTitle("Your Title");
答案 8 :(得分:8)
请参阅https://code.google.com/p/android/issues/detail?id=77763。显然它应该像那样工作。一旦调用setSupportActionBar()
方法调用,ActionBar委托就有责任将调用路由到正确的视图。
答案 9 :(得分:5)
我尝试从片段重命名工具栏
它帮助了我,我希望能帮助别人
Activity activity = this.getActivity();
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.detail_toolbar);
if (toolbar != null) {
activity.setTitle("Title");
}
//toolbar.setTitle("Title"); did not give the same results
答案 10 :(得分:5)
对于在设置SupportActionBar(@sorianiv) AND 之后需要一段时间通过工具栏设置标题的任何人,您的Toolbar
位于CollapsingToolbarLayout
内,请阅读以下内容:
mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
//toolbar.setTitle(""); // no need to do this
//mToolbarLayout.setTitle("Title"); // if you need an initial title, do this instead
setSupportActionBar(toolbar);
然后,
mToolbarLayout.setTitle("New Title");
答案 11 :(得分:5)
这不仅仅是关于.setTitle
onCreate
中的支持工具栏(Appcompat v7)的更多方法仅适用于
getSupportActionBar().method()
并且不适用于mToolbar.method()
示例:
getSupportActionBar().setTitle("toolbar title");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
虽然下一个方法在getSupportActionBar()
onCreate
时工作正常
mToolbar.setVisibility(View.VISIBLE);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
}
仅在onCreate
事件出现问题时,您仍然可以在以后使用mToolbar.setTitle()
而不是恼人的getSupportActionBar().setTitle()
,例如,如果您在onCreate
中添加它,它将起作用(因为它将在onCreate
)之后执行
mHandler.post(new Runnable() {
@Override
public void run() {
mToolbar.setTitle("toolbar title");
}
});
我更喜欢使用此解决方案https://stackoverflow.com/a/35430590/4548520而不是https://stackoverflow.com/a/26506858/4548520,因为如果您多次更改标题(使用不同的功能),使用mToolbar.setTitle()
比使用更长的getSupportActionBar().setTitle()
更方便并且您没有看到与getSupportActionBar().setTitle()
答案 12 :(得分:4)
只需在适配器中使用它, MainActivity是您的AppCompactActivity的位置。 从任何地方打电话。
try
{
final Field field = collapsingToolbarLayout.getClass().getDeclaredField("mCollapsingTextHelper");
field.setAccessible(true);
final Object object = field.get(collapsingToolbarLayout);
final Field tpf = object.getClass().getDeclaredField("mTextPaint");
tpf.setAccessible(true);
((TextPaint) tpf.get(object)).setTextSize(getResources().getDimension(R.dimen.textsize));
}
catch (Exception ex) {
}
答案 13 :(得分:4)
我使用 -
使其成功toolbar.post(new Runnable() {
@Override
public void run() {
toolbar.setTitle("My Title");
}
});
答案 14 :(得分:2)
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//custom toolbaar
getSupportActionBar().setTitle("Abhijeet");
}
}
答案 15 :(得分:2)
应用程序标题不会在每个活动中显示为默认标题,您可以在每个活动中插入不同的标题。在您的活动文件下面,onCreate只需粘贴一行以设置标题,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("Your Title Here");
只需将文本“此处的标题”更改为您的文本。
答案 16 :(得分:2)
如果您的目标是在工具栏中设置静态字符串,最简单的方法是在AndroidManifest.xml中设置活动标签:
<activity android:name=".xxxxActivity"
android:label="@string/string_id" />
工具栏将在没有任何代码的情况下获取此字符串。 (适用于v27库。)
答案 17 :(得分:2)
我有一种可能对你有帮助的奇怪行为 这是有效的,但它仅对onCreate没有影响:
toolbar.setTitle("title");
尝试在onCreate中使用它:
yourActivityName.this.setTitle("title")
答案 18 :(得分:2)
如果您使用CollapsibleToolbarLayout
以及Toolbar
,那么您需要在两个布局中设置标题
将工具栏设置为onCreate
方法
protected void setUpToolBar() {
if (mToolbar != null) {
((HomeActivity) getActivity()).setSupportActionBar(mToolbar);
mToolbar.setTitleTextColor(Color.WHITE);
mToolbar.setTitle("List Detail");
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity()
.getSupportFragmentManager().popBackStack();
}
});
((HomeActivity) getActivity()).getSupportActionBar()
.setDisplayHomeAsUpEnabled(true);
}
}
稍后只需使用setTitle
方法
mToolbar .setTitle(productFromShoppingList.getProductName()); mCollapsingToolbar.setTitle(productFromShoppingList.getProductName());
答案 19 :(得分:2)
试试这个:
Xml代码
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="120dp"
android:id="@+id/tool_bar"
android:background="@color/tablayout"
android:theme="@style/ToolBarStyle"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:layout_gravity="center"
android:id="@+id/toolbar_title"
android:textSize="18sp"
android:textColor="@color/white"/>
</android.support.v7.widget.Toolbar>
Java代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar_text = (TextView)findViewById(R.id.toolbar_title);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setLogo(R.drawable.ic_toolbar);
}
答案 20 :(得分:2)
更改每个不同活动的标题
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pizza);
setTitle(getResources().getText(R.string.title));
}
答案 21 :(得分:1)
可以通过在AndroidManifest.xml
文件中设置活动的<activity android:name="my activity"
android:label="The Title I'd like to display" />
属性来完成此操作:
getSupportActionBar().setDisplayShowTitleEnabled(true);
然后将此行添加到onCreate():
rnpm link
答案 22 :(得分:0)
虽然没有立即与这个特定的设置相关,但我发现从我的XML中删除“CollapsingToolbarLayout”将我的工具栏包装在AppBarLayout中使一切正常。
所以,这个:
class LoggingService {
func sayWorld() {
print("world")
}
}
protocol LoggerType {
func sayWorld()
}
extension LoggerType {
private var loggerInstance: LoggingService {
print("init")
return LoggingService()
}
func sayWorld() {
self.loggerInstance.sayWorld()
}
}
class ViewMock: LoggerType {
init() {
}
}
let viewObj = ViewMock()
viewObj.sayWorld()
而不是:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/ic_arrow_back_white_24dp" />
</android.support.design.widget.AppBarLayout>
然后,在调用setSupportActionBar()之前,我在活动的onCreate中设置标题。
答案 23 :(得分:0)
答案在文档中(您可以找到here):
要使用ActionBar实用程序方法,请调用活动 getSupportActionBar()方法。此方法返回对a的引用 appcompat ActionBar对象。一旦你有了这个参考,你可以打电话 用于调整应用栏的任何ActionBar方法。例如,到 隐藏应用栏,调用ActionBar.hide()。
这是您实际找到的解决方案。只是考虑提供官方文档(显然很少有人会阅读)。
答案 24 :(得分:0)
确保添加此选项:
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);
答案 25 :(得分:-3)
这种情况正在发生,因为您正在使用工具栏和ActionBar。现在,当您想要使用工具栏作为操作栏时,您需要做的第一件事是禁用装饰提供的操作栏。
最简单的方法是让您的主题从Theme.AppCompat.NoActionBar
延伸。