从Collapsingtoolbarlayout获取Textview

时间:2016-01-02 01:54:24

标签: android textview android-collapsingtoolbarlayout shared-element-transition

我目前正试图从collapsingtoolbarlayout获取标题作为textview。我想在之前的活动中的recyclerview中的项目之间进行共享元素转换。来自recyclerview中项目的标题应转换为我的collapsingtoolbarlayout标题。

在活动A中,我有一个带有该列表布局的recyclerview:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/row_container"
    android:layout_height="220dp"
    android:layout_width="match_parent"
    android:layout_margin="5dp"
    card_view:cardBackgroundColor="#282828"
    card_view:cardCornerRadius="3dp"
    android:foreground="?attr/selectableItemBackground"
    android:elevation="3dp"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_vertical"
        >
        <ImageView
            android:id="@+id/cover"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:elevation="2dp"
            />
        <ProgressBar
            android:id="@+id/progress"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:visibility="invisible"/>
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/item_top"
        android:layout_gravity="top"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:elevation="3dp"
        android:padding="5dp"
        >
        <TextView
            android:id="@+id/title"
            android:textColor="#d3d3d3"
            android:textStyle="bold"
            android:maxLines="1"
            android:gravity="left|top"
            android:textSize="15sp"
            android:elevation="3dp"
            android:ellipsize="end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <TextView
            android:id="@+id/text"
            android:textColor="#d3d3d3"
            android:elevation="3dp"
            android:gravity="left|top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
</android.support.v7.widget.CardView>

@ id / title应该为此活动B的collapsingtoolbarlayout标题设置动画:

<android.support.design.widget.CoordinatorLayout       
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"
android:id="@+id/rootlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    >
    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:expandedTitleMarginStart="28dp"
        app:expandedTitleMarginEnd="20dp"
        app:contentScrim="?attr/colorPrimary"
        >

        <ImageView
            android:id="@+id/toolbar_image"
            android:visibility="invisible"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:transitionName="toolbar_image"
            app:layout_collapseMode="parallax"
            />

        <android.support.v7.widget.Toolbar
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:elevation="0dp"
            />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/scrollView"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#252525"
    >
    ...
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

  1. 阅读Android开发者页面或任何在线教程的意图。

  2. 在上一个活动中单击RecyclerView项目时,为新活动创建一个意图。

  3. 使用.putExtra()通过意图将项目名称作为字符串传输

  4. 在新活动onCreate()方法中,使用:

  5.     .getStringExtra()
    
        String title = intent.getStringExtra("title_name");
    
        tv = (TextView)findViewById(R.id.textview);
        tv.setText(title);
    

    这是一般代码。相应修改。

    我希望这是你所需要的。

答案 1 :(得分:0)

如果您的项目是:

<RelativeLayout>
    <TextView
        ...
        android:transitionName="@string/transition_name"/>
</RelativeLayout>

和详情活动:

<CoordinatorLayout>
     <AppBarLayout>
        <CollapsingToolbarLayout
            ...
            android:minHeight="100dp"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <Toolbar
            android:title=""
            android:gravity="top"
            android:minHeight="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

                <TextView
                    ...
                    android:transitionName="@string/transition_name"/>

            </Toolbar>
        </CollpasingToolbarLayout>
    </AppBarLayout>

    <RecyclerView
        ...
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</CoordinatorLayout>

这里的catch是transitionName元素,它是activity的TextView中的公共属性,两个名称应该相同。这就是XML工作的全部内容。

在Java中,

Intent i = new Intent(MainActivity.this, DetailsActivity.class);

View sharedView = textview;
String transitionName = getString(R.string.transition_name);

ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, sharedView, transitionName);
startActivity(i, transitionActivityOptions.toBundle());

请参阅此处详细的最佳文档:

https://github.com/lgvalle/Material-Animations

答案 2 :(得分:0)

至于我查看了折叠工具栏代码,它只是工具栏的包装器,以及它所具有的setTitle()函数,它只设置一个collapsingtexthelper来实现{ {1}},并使用它在布局的视图中显示。

就我在代码中看到的情况而言,没有charsequence