Android磨损应用程序在圆形手表上显示矩形布局

时间:2015-03-16 22:12:30

标签: android wear-os

我有一个Android佩戴应用程序但是当我在圆形手表(Moto 360)上运行它而不是显示的圆形布局时,矩形的是。

当创建新的磨损项目时,Android Studio会创建所有必要的布局文件,以使其能够根据需要自动加载矩形布局我们的圆形布局,除了矩形或圆形布局文件本身。特别是我没有更改activity_main.xml,也没有更改rect或round活动的名称,也没有更改活动中的加载方式。

这是activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.wearable.view.WatchViewStub
    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:id="@+id/watch_view_stub"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rectLayout="@layout/rect_activity_main"
    app:roundLayout="@layout/round_activity_main"
    tools:context=".MainActivity"
    tools:deviceIds="wear"></android.support.wearable.view.WatchViewStub>

这里是round_activity_main.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=".MainActivity" tools:deviceIds="wear_round">

    <RelativeLayout
        android:layout_width="fill_parent"

为了完整性,这里是rect_activity_main.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" android:orientation="vertical"
    tools:context=".MainActivity" tools:deviceIds="wear_square"
    android:clickable="true">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="60dp"

以下是在活动的onCreate()

中加载布局的方法
   setContentView(R.layout.activity_main);
            WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
            stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener()
            {
                @Override
                public void onLayoutInflated(WatchViewStub stub)
                {
                ...

就我所知,一切都应该如此,就像我提到的那样,应该是因为我还没有改变Android Studio所创造的内容。 有人知道问题是什么吗?

2 个答案:

答案 0 :(得分:1)

首先查看此答案,我会解释WindowInsets的送达方式:Can you use a WatchViewStub in a GridViewPager for Android Wear?

之后:

  1. 您是否在活动中使用此内容?

  2. 您是否设置了一些OnApplyWindowInsetsListener?

  3. 尝试在onCreate中调用stub.requestApplyInsets()。

  4. 编辑:

    从评论中的讨论和进一步调查。您似乎需要在主题上设置<item name="windowOverscan">true</item>,以便将WindowInsets发送给您的观看次数。

答案 1 :(得分:1)

如果您想要一个简单的解决方案,而不是WindowInsets,那么您应该看看这个库:https://github.com/tajchert/ShapeWear 只需拨打ShapeWear.initShapeWear(this);一次即可进行初始化,就是这样 - 只需随时致电getShape()