草庐IT

android - 动态设置时折叠工具栏的标题不会改变?

coder 2023-12-17 原文

我使用 viewpager 来显示每月的数据。我想根据 viewpager 页面的变化更改折叠工具栏的标题。 折叠工具栏标题仅在向上滚动工具栏时发生变化。

我的布局

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.v4.view.ViewPager
                android:id="@+id/view_pager"
                android:layout_width="match_parent"
                android:layout_height="@dimen/activity_history_view_pager_height" />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_history_collapsing_toolbar_height"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_flexible_space"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                android:fitsSystemWindows="true"
                android:minHeight="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:theme="@style/ThemeOverlay.AppCompat.Light" />
        </android.support.design.widget.CollapsingToolbarLayout>

        <TextView
            android:id="@+id/txt_year"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/activity_history_margin_left"
            android:layout_marginStart="@dimen/activity_history_margin_left"
            android:text="@string/activity_history_year"
            android:textColor="@color/white"
            android:textSize="@dimen/activity_history_text_size" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="@dimen/activity_history_margin_bottom"
            android:orientation="vertical"
            app:layout_scrollFlags="scroll">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_marginEnd="@dimen/activity_history_margin_right"
                android:layout_marginRight="@dimen/activity_history_margin_right"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/img_leftBackArrow"
                    android:layout_width="@dimen/activity_history_arrow_size"
                    android:layout_height="@dimen/activity_history_arrow_size"
                    android:contentDescription="@string/content_description"
                    android:src="@drawable/previous_arrow" />

                <ImageView
                    android:id="@+id/img_rightBackArrow"
                    android:layout_width="@dimen/activity_history_arrow_size"
                    android:layout_height="@dimen/activity_history_arrow_size"
                    android:layout_marginLeft="@dimen/activity_history_arrow_size"
                    android:layout_marginStart="@dimen/activity_history_arrow_size"
                    android:contentDescription="@string/content_description"
                    android:src="@drawable/next_arrow" />

            </LinearLayout>


        </RelativeLayout>

    </android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>

Activity 中

    /**
     * Lists History of the Tasks and it's status on the basis of Date
     */
    public class HistoryActivity extends BaseActivity implements ViewPager.OnPageChangeListener {

        @InjectView(R.id.toolbar_flexible_space)
        Toolbar toolbar;

        @InjectView(R.id.collapsing_toolbar)
        CollapsingToolbarLayout mCollapsingToolbar;

        @InjectView(R.id.view_pager)
        ViewPager viewPager;

        @InjectView(R.id.txt_year)
        TextView txtYear;
        int viewPagerSize = 0;

        ArrayList<String> taskAddedMonths;

        @OnClick({R.id.img_leftBackArrow, R.id.img_rightBackArrow})
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.img_rightBackArrow:
                    moveForward();
                    break;
                case R.id.img_leftBackArrow:
                    moveBackWard();
                    break;

            }

        }

        /**
         * move view pager page as accroding to clicking on backword arrow.
         */
        private void moveBackWard() {
            int currentPosition = viewPager.getCurrentItem();
            if (currentPosition > 0) {
                int nextPosition = currentPosition - 1;
                viewPager.setCurrentItem(nextPosition);
                mCollapsingToolbar.setTitle(getCollapsingToolbarTitle(taskAddedMonths.get(nextPosition)));
            }
        }

        /**
         * move view pager page as according to clicking on forward arrow.
         */
        private void moveForward() {
            int currentPosition = viewPager.getCurrentItem();

            if (currentPosition < viewPagerSize-1) {
                int nextPosition = currentPosition + 1;
                if (viewPagerSize == 1) {
                    //do nothing
                } else {
                    viewPager.setCurrentItem(currentPosition + 1);
                    mCollapsingToolbar.setTitle(getCollapsingToolbarTitle(taskAddedMonths.get(nextPosition)));
                }
            }
        }


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            taskAddedMonths = DatabaseManager.getInstance(HistoryActivity.this).getAllMonths();
            viewPagerSize = taskAddedMonths.size();

            mCollapsingToolbar.setTitle(getCollapsingToolbarTitle(taskAddedMonths.get(0)));
            mCollapsingToolbar.setExpandedTitleColor(Color.WHITE);
            toolbar.setNavigationIcon(ContextCompat.getDrawable(this, R.drawable.ic_backarrow));

            viewPager.setAdapter(new ViewPagerAdapter(HistoryActivity.this, DatabaseManager.getInstance(HistoryActivity.this).getAllMonths()));
            viewPager.addOnPageChangeListener(this);

        }

        @Override
        public int getLayoutId() {
            return R.layout.activity_history;
        }

        @Override
        public Toolbar getToolbar() {
            return toolbar;
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_history, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            //noinspection SimplifiableIfStatement
            if (id == android.R.id.home) {
                onBackPressed();
            }
            return super.onOptionsItemSelected(item);
        }

        /**
         * get the name of month with concatenating History as like this{May History};
         *
         * @param month
         * @return
         */
        private String getCollapsingToolbarTitle(String month) {
            return month + " " + "History";
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
/******************* what i have done*******************/
            //change the title of collapsing toolbar accroding to change in page of viewpager
            mCollapsingToolbar.setTitle(getCollapsingToolbarTitle(taskAddedMonths.get(position)));
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    }

最佳答案

这是一个 known bug这应该在设计库的 v22.2.1 版本中得到修复。

关于android - 动态设置时折叠工具栏的标题不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521558/

有关android - 动态设置时折叠工具栏的标题不会改变?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  4. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  6. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  7. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  8. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  9. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐