Android 当用户在编辑文本中输入值时开始 activity

Android start activity when user enters value in edit text

我注意到像 google maps 和 lyft 这样的应用程序有一个 feature/behavior 当用户开始在文本字段中输入地址时,文本字段会占据整个屏幕(开始一个新的 activity) 特别关注输入。当用户从列表视图中选择某些内容时,他们会将所有其他信息带回屏幕

我很好奇如何才能实现这样的目标。 他们使用不同的 activity 吗?

我正在开发的应用程序具有类似的功能,但我想我不确定如何在用户开始输入时让我的文本字段覆盖整个屏幕(或者可能开始一个不同的activity)。

我只是在寻找指导或示例。不幸的是,因为我不知道我正在寻找的东西的确切名称,所以在文档中搜索它有点困难。任何指针将不胜感激!

PS: 我知道这种方法,但这不是我要找的

<activity android:name=".MyActivity" android:windowSoftInputMode=""/>

我实际上会做的是:我会将其创建为 "simple" 视图。不是片段,不是 activity.

  • 我将从创建一个布局来代表 "expanded" 版本的 TextView(我会区分视图的 expandedcollapsed 状态;expanded 是它填充整个屏幕)。
  • 我会将其宽度和高度设置为 match_parent,然后放置 它在 activity (或片段或其他)内。例如用 align_parentTop 锚定它。
  • 将主要 activity 布局上的 clipChildren 设置为 false
  • 在这个 Activity onCreate 里面(或其他一些类似的地方
    某种容器),我会像这样添加更多内容:

代码:

mExpandableTextView = (RelativeLayout)findViewById(R.id.expandable_text_view_layout);
    //layout representing the expandable textview (defined in expanded state)

mExpandableTextView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int width = mExpandableTextView.getWidth();
        int height = mExpandableTextView.getHeight();
        if (width > 0 && height > 0) {
            mExpandableTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

            // setting the height and width of the view to fixed values (instead of match_parent)
            // this problably is not really necessary but I will write it just to be sure it works as intended
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)mExpandableTextView.getLayoutParams();
            params.height = height;
            params.width = width;
            mExpandableTextView.setLayoutParams(params);

            mMaxTranslationY = height - mCollapsedHeight;
                //mCollapsedHeight is the height of the view in collapsed state
                //provide it in most convenient way for you

            mExpandableTextView.setTranslationY(mMaxTranslationY);
                //setting it to the collapsed state when activity is being displayed for the first time
        }
    }
});

(如果您的应用适用于 < API16 设备,请记住使用 removeGlobalOnLayoutListener()

  • 然后我会在折叠状态下检测视图(布局)唯一可见部分的点击,然后我会使用以下代码展开或折叠它:

崩溃:

mExpandableTextView.animate().translationY(mMaxTranslationY); //to collapse with animation

展开:

mExpandableTextView.animate().translationY(0); //to expand with animation

我最后做的一个更简单的方法是在激活文本字段后为结果启动 activity,并在新完成后设置值