当前位置: 首页 > 知识库问答 >
问题:

工具栏中的TextView是否变得不可变?

邵赞
2023-03-14

我尝试遵循在工具栏中创建自定义TextView的教程(https://guides.codepath.com/android/using-the-app-toolbar#custom-title-view)。我想做的是能够使用Java动态更改TextView中的文本。但是,问题是我不能并且没有显示错误消息。

XML 中的工具栏代码:

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:elevation="4dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

                <TextView
                    android:id="@+id/toolbarTitle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Test1"
                    android:textSize="16sp"
                    android:textColor="@color/textColor" />

        </androidx.appcompat.widget.Toolbar>

活动类中的工具栏Java代码:

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        TextView toolbarTitle = toolbar.findViewById(R.id.toolbarTitle);

        toolbarTitle.setText("Test");

Styles.xml:

    <!-- 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/colorSecondary</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

一个简单的toolbarTitle.setText()应该可以完成这项工作,但是由于一些未知的原因,它没有做到。即使我从XML代码中删除android:text并在Java代码后使用setText(),它仍然不能工作。

这是否意味着工具栏中的文本视图是不可变的?

谢谢!

编辑 1:

所以我设法找到了问题,但还没有特别找到解决方案。问题是由activity_main中的数据绑定引起的。xml文件。一旦删除了与数据绑定相关的所有代码,我就可以按照我想要的方式使用setText()。为什么这会引起问题?

活动_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".activity.MainActivity">
    <data>
        <variable
            name="VM"
            type="com.tahmidu.app.view_model.IMainActivityNavViewModel" />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="?attr/actionBarTheme"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <TextView
                android:id="@+id/toolbarTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/textColor" />

        </androidx.appcompat.widget.Toolbar>

        <FrameLayout
            android:id="@+id/audioMainFragment"
            android:name="com.tahmidu.app.fragment.AudioFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/toolbar" />


        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigationView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorSecondary"
            app:itemIconTint="@color/bottom_navigation_color"
            app:labelVisibilityMode="unlabeled"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:menu="@menu/bottom_navigation_main" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

共有2个答案

孙玮
2023-03-14

解决方案(Nabil建议):绑定文本。确保设置LifecycleOwner()方法,否则UI将不会更新。如果从外观上看使用数据绑定,setText()将停止工作。

陆宏扬
2023-03-14

工具栏内的文本视图绝对不是不可变的。也许问题出在调用文本视图.它应该在创建视图之后,因此在创建()或视图创建()上

 类似资料:
  • 我已经建立了一个远程docker存储库,缓存docker注册表。我已经通过一个标签从艺术工厂远程拉一个docker图像,层现在在艺术工厂缓存中。如果标签在源注册表中被修改,后续从远程提取是否会获得新图层?是否有任何缓存配置使远程标签不可变? 同样,如何使其他包类型的远程存储库不可变?

  • 我最近遇到了协调器布局的问题。当我尝试创建简单的折叠工具栏布局(如本例所示)时,工具栏似乎位于状态栏下,如下图所示(在preLolipop设备上,一切都正常,因为应用程序不会在状态栏下绘制)。 我的活动布局的代码片段: My Styles(仅限21版),其中BaseAppTheme父级为Theme.AppCompat.Light.NoActionBar:

  • 问题内容: 在我们的应用程序中,我们需要具有只能分配一次的字段。 最初,我们想到封装字段并将设置程序设为私有。但是,引起一些问题: 如果没有公共设置者,Hibernate是否仍然可以从数据库映射字段? 我是否可以剥离设置器并使字段仅在实体构造函数中可变? 最后,是否有任何标准的JPA方法使字段不变? 提前致谢。 问题答案: 广告。1:我相信,如果将注释放在字段而不是在getter上,则JPA会将普

  • 我正在创建一个视图及其相应的应用程序。我的包含一些项目,如果单击这些项目,则会将用户带到 。 在< code>DetailViewActivity上,我实现了一个可折叠的工具栏。现在,每次打开< code>DetailViewActivity时,都会在可折叠工具栏内的< code>ImageView上设置不同的图像(具有不同的尺寸)。 我希望默认打开到一定高度(例如 256dp),但如果图像高度大

  • routerLink指令在材料2的md-toolbar组件中没有影响。

  • 底部导航,有图标和文字,响应鼠标事件和当前页面导航 <nav class="bar bar-tab">   <a class="tab-item external active" href="#">     <span class="icon icon-home"></span>     <span class="tab-label">文案</span>   </a>   <a clas