当前位置: 首页 > 面试题库 >

以编程方式将transitionName添加到工具栏标题(Android)

诸葛雨泽
2023-03-14
问题内容

是否可以通过编程将xml属性transitionName设置为Toolbar标题,然后使用将该属性用于动画ActivityOptionsCompat

这就是我声明我的方式Toolbar

        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        myToolbar.setTitle("title");

这是我的xml声明:

<android.support.v7.widget.Toolbar
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/primary_color"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        android:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

为了添加动画,我必须使用以下代码:

ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
    albumCoverImageView,   // The view which starts the transition (Should be myToolbar title)
    transitionName    // The transitionName of the view
    );
ActivityCompat.startActivity(activity, intent, options.toBundle());

如何将ToolbarTextView?)标题传递给makeSceneTransitionAnimation函数?


问题答案:

是的,这是可能的:

扩展的类ViewCompat能够调用setTransitionName(String name)

例如:

myToolbar.setTransitionName("ToolbarTransition");

更新 似乎您专门尝试共享标题,因此我将执行以下操作:

MainActivity的示例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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.divshark.toolbaranimation.MainActivity"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:textColor="@android:color/white"
            android:text="Activity Title" />
    </android.support.v7.widget.Toolbar>

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/btnNext"
        android:text="Next"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

然后在“活动”参考中,该视图:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
        final AppCompatTextView mTextView = (AppCompatTextView) mToolbar.findViewById(R.id.tv_title);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mTextView.setTransitionName("SimpleTransition");
        }

        AppCompatButton mBtnNext = (AppCompatButton) findViewById(R.id.btnNext);
        mBtnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent secondActivity = new Intent(MainActivity.this, SecondActivity.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, mTextView, mTextView.getTransitionName());
                    startActivity(secondActivity, options.toBundle());
                } else {
                    startActivity(secondActivity);
                }
            }
        });
    }
}

然后在您的SecondActivity中:

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);

        AppCompatTextView mTextView = (AppCompatTextView) findViewById(R.id.tv_title);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mTextView.setTransitionName("SimpleTransition");
        }
    }
}

使用此xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_centerInParent="true"
        android:textColor="@android:color/black"
        android:text="Activity Title" />
</RelativeLayout>

如您所见,您可以使用ViewCompat视图以编程方式调用setTransitionName(String name)

祝您好运,编码愉快!



 类似资料:
  • 我有一个excel工作表(File1.xls)。在处理File1.xls数据之前,我需要在其中添加列标头,或者创建一个带有列标头的新excel文件(File2.xls),并将File1.xls数据复制到其中。 目前,我正在使用OleDbConnection从excel工作表中读取数据,并使用OleDbCommand,OleDbDataAdapter将其加载到Datatable中。但我找不到任何方法

  • 问题内容: 我正在尝试使用导航栏(“后退”按钮,标题等)和选项卡栏(底部的工具栏)制作一个应用程序。我使用的是子视图,因此不必担心状态栏,导航栏,标签栏的高度等问题。但是我认为这给我带来了麻烦,因为我似乎无法弄清楚如何设置导航栏和标签栏。 这就是我所拥有的。我究竟做错了什么? AppDelegate.h AppDelegate.m ViewController.h ViewController.m

  • 我想在qTip2工具提示中添加标题。目前我有以下代码: 这给了我一个带有简单工具提示的文本(http://beta.summonersindex.com/test.html)。我只是无法添加标题,如演示页面所示:http://qtip2.com/demos (“添加标题”)。我为此寻找了很多解决方案,但它们要么已经过时,要么不适合我。我希望你们能帮助我!谢谢:)

  • 在我的activity_main.xml我有这个工具栏: 在清单中有

  • 我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:

  • 问题内容: 对于RealityKit的文档包括结构:,,和用于添加材料到。 或者,您可以在模型中加载带有附加材料的模型。 我想以编程方式添加自定义材料/纹理。如何在不向Reality Composer或其他3D软件的模型中添加材料的情况下即时实现这一目标? 问题答案: 已更新:2020年6月23日 。 目前,RealityKit 2.0中有4种类型的材料 : 简单材质 不发光材料 咬合材料 Vid