处理向下滑动作为后退按钮

时间:2014-09-15 21:19:16

标签: android-activity google-glass google-gdk

我正在为Google Glass编写一个简单的应用程序。有三个活动,每个活动处理一张静态卡。每张卡都有自己的菜单。现在我在谷歌开发者看来,刷卡应该像Android智能手机上的后退按钮一样工作,即从堆栈调用最后一个活动。现在我的问题是这只适用于发射器'活动。

ok-glass menu -> activity_1 -> ok-glass menu工作正常,但是 activity_1 -> activity_2 -> activity_1没有。 activity_3也是如此。但是,如果从activity_3调用activity_1,则向下滑动将按预期运行。 (activity_3 -> activity_1 -> activity_3有效)。

此外,向下滑动可在所有活动的菜单中使用。

现在我有几个问题:

  1. 每张卡片使用单独活动的方法是正确的吗?
  2. 是否应在onKeyDown方法或onClicklistener
  3. 中处理用户输入
  4. 是否有必要覆盖向下滑动手势,使其按预期方式工作(返回上一个活动)?
  5. 不相关:我的所有菜单只包含一个选项,用作用户想要继续的一种确认。 (即打电话给下一个活动)。这是最佳做法吗?
  6. 我花了3个小时在这个问题上搜索互联网。我尝试调用super.onBackPressed,实现各种类型的侦听器并在视图上使用setFocusMethod。 任何有关如何在整个应用程序中始终如一地工作的建议都非常感谢。 提前谢谢!

    您可以在下面找到其中一项活动的代码,这些活动在这三项活动中看起来相似。

    public class Test1Activity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        View test1 = new CardBuilder(getBaseContext(), CardBuilder.Layout.CAPTION)
            .setText("test1")
            .getView();
    
        setContentView(test1);
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            openOptionsMenu();
            return true;
        }
        return false;
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.test1, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId()) {
            case R.id.test1_ack:
                Intent intent = new Intent(this, Test2Activity.class);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    }
    

1 个答案:

答案 0 :(得分:2)

  
      
  1. 每张卡片使用单独的活动的方法是正确的吗?
  2.   

这取决于。在Android中,活动代表用户可以做的单一,专注的事情。所以,如果您的活动/卡片不相关,那就没问题。 如果是,您可以使用CardScrollView在一个活动中将卡组合在一起。 http://developer.android.com/training/design-navigation/descendant-lateral.html也可能有所帮助。 (它解释了如何将信息组合在一起。)

  
      
  1. 是否应在onKeyDown方法或onClicklistener处理用户输入?
  2.   

您应该使用GestureDetector。见https://developers.google.com/glass/develop/gdk/touch。 onKeyDown功能有限,因为它不是为Glass设计的。我可能错了,但我认为你只能用onKeyDown检测点击。

  
      
  1. 是否有必要覆盖向下滑动手势,使其按预期方式工作(返回上一个活动)?
  2.   

这是默认行为(无标记)。如果您在启动活动2时未在活动1上调用finish(),则应该可以返回而不会覆盖任何方法。 请参阅:Android: Go back to previous activity。 您还可以在清单中使用android:parentActivityName标记来指定父活动。 (http://developer.android.com/guide/topics/manifest/activity-element.html

  
      
  1. 不相关:我的所有菜单只包含一个选项,用作用户确认他想要继续的一种选项。 (即   打电话给下一个活动)。这是最佳做法吗?
  2.   

它有点奇怪,但没有错。无论如何,每次用户做某事时,您都不需要确认。 我不是一个用户体验设计师,但我注意到内置应用程序,在Glass上确认/确认屏幕并不常见。 例如,当您发送短信时,没有确认对话框。我想设计团队试图摆脱不必要的互动。 尝试让菜单代表一个动作,以便用户前进/或在每次点击时执行某些操作。

另见https://developers.google.com/glass/tools-downloads/glassware-flow-designer

注意:我不是用户体验设计方面的专家,所以不要相信我:)

You can check out my example on GitHub。我实现了下面显示的流程。

flow