动作栏仅在某些活动中?

时间:2018-09-25 12:27:35

标签: android android-layout android-activity android-actionbar

我正在构建一个Android应用程序,我想知道为什么有些“活动”显示了操作栏,而有些却没有。操作栏本身仅显示应用程序包名称。包含相同xml代码的两个活动具有不同的行为。一个显示带有应用标题的操作栏,另一个不显示应用标题。

启动器活动还会显示带有应用程序标题的操作栏。

Launcher活动XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.LoginActivity">

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintBottom_toTopOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"></LinearLayout>

<TextView
    android:id="@+id/textpassword"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Password"
    android:textSize="30sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.441" />

<TextView
    android:id="@+id/textlogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Login"
    android:textSize="30sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.22" />

<EditText
    android:id="@+id/passwordfield"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="9dp"
    android:ems="10"
    android:inputType="textPassword"
    android:text="Password"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textpassword" />

<EditText
    android:id="@+id/loginfield"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="7dp"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Name"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textlogin" />
<Button
    android:id="@+id/loginbutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="7dp"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Login"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/passwordfield"/>

具有奇怪行为的两个活动之一:

<?xml version="1.0" encoding="utf-8"?>
<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView android:id="@+id/todo_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" />

此外,我想知道如何在Acionbar中更改应用程序标题。 xml中似乎没有定义标题的选项。我认为android studio将此设置为项目名称(我使用的是工作名称,而不是实际的“真实”应用名称)?根据文档,我可以构建自己的应用栏(https://developer.android.com/training/appbar/setting-up)。这样有帮助吗?

2 个答案:

答案 0 :(得分:0)

要创建Toolbar并使用自定义标题,您需要做的就是记住Toolbar只是一个奇特的ViewGroup,因此您可以像这样添加自定义标题:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/action_bar_bkgnd"
app:theme="@style/ToolBarTheme" >

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Toolbar Title"
    android:layout_gravity="center"
    android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>

这意味着您可以根据需要设置TextView的样式,因为它只是常规的TextView。因此,在您的活动中,您可以像这样访问标题:

Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);

答案 1 :(得分:0)

您得到的奇怪行为可能并不奇怪。

默认情况下,ActionBar显示在AndroidManifest.xml中设置为android:label="@string/app_name"的应用程序名称。

在特定的actionbar中为您的activity使用不同标题的一种直接方法是在activity中给该AndroidManifest.xm一个标签,如下所示:

 <activity android:name=".Main2Activity" android:label="page2"></activity>

这可能是奇怪行为的原因。

如果某些活动未显示actionbar,则可能是由于theme文件中的活动manifest造成的。