如何在可穿戴应用程序中实现导航抽屉?

问题描述

我看过很多教程,但它们都是针对移动应用程序的,我似乎无法在可穿戴应用程序中实现相同的内容。我的应用程序包含一个设置活动。我的应用包含一个 settings Activity。我有几个单选按钮,分为几个部分:

我使用 textviews 将它们分开,告诉每个单选按钮组的用途。例如:

一个显示 Modes 的文本视图是一组用于不同模式的单选按钮。在用户做出他/她的选择后,他们点击一个按钮,他们的选择将数据发送到另一个活动。我想要的是使用导航抽屉划分所有这些部分,以便我访问的每个片段都有一组单选按钮,而不是将它们全部放在我滚动浏览的一个活动中。

我看过有关手机应用的答案。现在我问的是可穿戴设备,因为这就是应用程序的用途,文档页面显示一个 gif,其中有一个导航抽屉,里面有一个类似旋转木马的东西,可以在不完全确定的活动或片段中导航。这是 gif:https://developer.android.com/wear/images/nav_drawer.gif

我想在我的可穿戴应用上做同样的事情。问题是文档并没有真正详细介绍如何在xml文件添加多页标签之外的实现细节。我需要做什么来模仿 gif 中的内容?我在文档页面添加内容,但不知道如何继续,https://developer.android.com/training/wearables/ui/ui-nav-actions#java

这是我在开始工作之前的主要活动:

   public class drawer_activity extends FragmentActivity
        implements AmbientModeSupport.AmbientCallbackProvider,MenuItem.OnMenuItemClickListener,NavigationView.OnNavigationItemSelectedListener {

    private TextView mTextView;
    private WearableDrawerLayout wearableDrawerLayout;
    private WearableNavigationDrawerView wearableNavigationDrawer;
    private WearableActionDrawerView wearableActionDrawer;
    //////////////////////////////////////////////////////////
    FragmentManager fragmentManager;



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

        mTextView = (TextView) findViewById(R.id.text);

        // Top navigation drawer
        wearableNavigationDrawer = (WearableNavigationDrawerView) findViewById(R.id.top_navigation_drawer);
        wearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this));
        // Peeks navigation drawer on the top.
        wearableNavigationDrawer.getController().peekDrawer();
        // Bottom action drawer
        wearableActionDrawer = (WearableActionDrawerView) findViewById(R.id.bottom_action_drawer);
        // Peeks action drawer on the bottom.
        wearableActionDrawer.getController().peekDrawer();
        wearableActionDrawer.setonMenuItemClickListener(this);

        fragmentManager = getSupportFragmentManager();

        
        //Declare Fragments here

    }

    @Override
    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
        return null;
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        return false;
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment;
        switch (item.getItemId()) {
            case R.id.Tools:
//                fragment = Tools;
                setTitle(item.getTitle());
                break;
            case R.id.Modes:
//                fragment = Mode;
                setTitle(item.getTitle());
                break;
            case R.id.Keys:
//                fragment = Key;
                setTitle(item.getTitle());
                break;

        }
        fragmentManager.beginTransaction().replace(R.id.top_navigation_drawer,fragment).commit();
        wearableNavigationDrawer.onDrawerClosed();
        return true;
    }
}

这是菜单资源文件

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/Tools"
            android:icon="@drawable/oil_drill"
            android:title="Tool" />
        <item
            android:id="@+id/Modes"
            android:icon="@drawable/mode"
            android:title="Mode" />
        <item
            android:id="@+id/Keys"
            android:icon="@drawable/key"
            android:title="Key" />
    </group>
</menu>

这是主要活动的布局:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.wear.widget.drawer.WearableDrawerLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dark_grey"
    android:padding="@dimen/Box_inset_layout_padding"
    tools:context=".drawer_activity"
    tools:deviceids="wear"
    >

    <androidx.wear.widget.drawer.WearableNavigationDrawerView
        android:id="@+id/top_navigation_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:navigationStyle="multiPage"
        app:actionMenu="@menu/action_drawer_menu"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/inner_frame_layout_padding"
        >

        <TextView
            android:id="@+id/text"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />

    </FrameLayout>

    <androidx.wear.widget.drawer.WearableActionDrawerView
        android:id="@+id/bottom_action_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</androidx.wear.widget.drawer.WearableDrawerLayout>

我一直在尝试从教程中借用一些东西,以便在手机应用程序上进行类似的操作,但老实说,我觉得我现在不知道我在做什么。 现在,每当我编写它们时,注释的 fragment 变量都会以红色突出显示。我遵循的教程声明了我在 values 目录中的 strings xml 文件中编写的内容,我也在此处执行了此操作:

<string name="Tools">Tool</string>
<string name="Modes">Mode</string>
<string name="Keys">Key</string>

感谢任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...