TextView和EditText之间的共享元素转换

时间:2015-05-18 22:12:15

标签: android android-edittext android-transitions

我尝试在TextView(来源)和EditText(目的地)之间共享文字,但它没有正常运作。

问题的背景是" Start an activity with a shared element"转换,使用android:transtionName属性。

启动新活动后,所有其他共享视图(ImageView)都会显示其值。 EditText知道内容,因为当我设置焦点时它正确显示。 " et.getText()"的记录器显示EditText内容已确定但尚未显示。

操作顺序如下:

  1. 来源活动' A'有原始数据:

    • TextView价值:" Hello world"。 android:transtionName="transition_text"
    • TextView显示:" Hello world"
  2. 关于用户活动,活动' B'使用共享元素转换启动并添加要共享的所有元素。

  3. 进入' B' onCreate方法正确获取和设置共享数据。所有元素都包含它们的值,但EditText不显示它:

    • EditText价值:" Hello world"。 android:transtionName="transition_text"
    • EditText显示:""
  4. 共享元素转换可能不允许不同类型文本视图之间的转换(TextView - > EditText)?

    由于

2 个答案:

答案 0 :(得分:0)

尝试从 TextView 获取文本,然后隐藏 toString() ,然后在 EditText 上设置文本

TextView tv = new TextView(this);
EditText et = new EditText(this);
tv.setText("Hello World");

String source = tv.getText().toString();
et.setText(source);

答案 1 :(得分:0)

为了解决这个问题,我将EditText和TextView包装到Layout中,然后在布局上进行动画制作。

这是我的编辑文字:

   <LinearLayout
        android:id="@+id/meeting_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:transitionName="tMeetingtitle">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </LinearLayout>

然后我的TextView:

  <LinearLayout
    android:id="@+id/meeting_title"
    android:layout_width="wrap_content"
    android:layout_height="33dp"
    android:transitionName="tMeetingtitle"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

在我的片段中,我开始制作动画:

            Intent intent = new Intent(mainActivity, DetailMeetingActivity.class);

            LinearLayout meetingTitle = (LinearLayout) view.findViewById(R.id.meeting_title);


            Pair<View, String> meetingTitlePair = Pair.create((View) meetingTitle, "tMeetingtitle");

            ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(mainActivity, meetingTitlePair);
            ActivityCompat.startActivity(mainActivity, intent, options.toBundle());