标题在“自定义工具栏”中不可见

时间:2018-10-16 17:16:23

标签: java android android-layout android-toolbar

我正在尝试实现自定义工具栏,但是我无法设法获得标题。 我已经在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);
    }
}

我真的尝试了很多。

  • 尝试使用getSupportActionBar()。setTitle(title);设置标题。
  • 我尝试了其他具有新项目的PC。
  • 我尝试使用其他方法

如果有人可以帮助我,那就太好了!

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

我发现一个错误,发现标题在虚拟设备或手机上运行正常,只是在预览设计中没有

IDE Screenshot 1

IDE Screenshot 2

IDE Screenshot 3

IDE Screenshot 4

IDE Error Screenshot 5

IDE Error Screenshot 6

4 个答案:

答案 0 :(得分:0)

我认为问题在于您的ID toolbarinclude标签的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内,但不影响idToolbar。所以您的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>")