我正在尝试实现自定义工具栏,但是我无法设法获得标题。 我已经在StackOverflow上尝试了很多帖子,但是没有成功。
Activity_Main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include layout="@layout/toolbar"
android:id="@+id/toolbar"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!" />
</RelativeLayout>
Toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:elevation="4dp"
>
</android.support.v7.widget.Toolbar>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.diong.amyappname">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
MainActivity.java
package com.example.diong.amyApp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
}
我真的尝试了很多。
如果有人可以帮助我,那就太好了!
UPDATE
我找到了“ a”修复程序, 在toolbar.xml中添加:
xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/app_name"
现在可以了,但是.. 我看到MainActivity.java中建议使用此代码
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("Your title here");
setSupportActionBar(toolbar);
有人可以帮我吗?
UPDATE 2.0
我发现一个错误,发现标题在虚拟设备或手机上运行正常,只是在预览设计中没有
答案 0 :(得分:0)
我认为问题在于您的ID toolbar
是include
标签的ID,而不是Toolbar
的ID。
因此,请尝试删除include
标记并将其替换为Toolbar
。
不要忘记将ID添加到您的Toolbar
中。
然后它应该起作用。
Activity_Main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:id="@+id/toolbar"
>
</android.support.v7.widget.Toolbar>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!" />
</RelativeLayout>
要更改标题,请在您的MainActivity中添加
getSupportActionBar.setTitle("Your title");
。
答案 1 :(得分:0)
将include
标记内设置的ID放入Toolbar
标记内。这里的include将Toolbar.xml
放在Activity_Main.xml
内,但不影响id
至Toolbar
。所以您的XML应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include layout="@layout/toolbar"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!" />
</RelativeLayout>
这是工具栏上的
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:id="@+id/toolbar"
>
</android.support.v7.widget.Toolbar>
记住要设置标题,如果您希望动态地设置标题,可以这样进行:
package com.example.diong.amyApp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("Your title here");
setSupportActionBar(toolbar);
}
}
答案 2 :(得分:0)
没有办法使真正的“实时”标题出现在IDE预览中。
预览不知道在活动的onCreate()
方法中执行的代码(即使您在根视图上指定了tools:context
)。这意味着预览不知道此Toolbar
是您活动的操作栏,因此它不知道应该显示标题。此外,它不会知道您在活动中进行的任何setTitle()
调用。
但是,您可以将tools:title
添加到工具栏本身,以便在那里看到 some 文本。这将向您显示标题的显示方式,因此您可以在预览中查看文本的颜色/大小/等。
答案 3 :(得分:0)
从我的角度来看,您需要对代码进行更改,例如:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(Html.fromHtml(
"<font color='#673AB7'><b>Your Title</b></font>")