Android Wear上的DelayedConfirmationView为空白

时间:2014-07-17 09:52:13

标签: android wear-os

我正在尝试通过启动活动从支持库中使用Andoird Wear的DelayedConfirmationView。

活动在OnCreate中有这个:

setContentView(R.layout.delayed_main);
mDelayed = (DelayedConfirmationView) findViewById(R.id.delay);
mDelayed.setTotalTimeMs(4000);
//mDelayed.setImageDrawable(getResources().getDrawable(R.drawable.close_button));
mDelayed.setListener(new DelayedConfirmationView.DelayedConfirmationListener() {
...

我的delayed_main有这个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/android.support.wearable.view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DelayedConfirmActivity">

<android.support.wearable.view.DelayedConfirmationView
    android:id="@+id/delay"
    app:circle_border_color="#2299ee"
    app:circle_border_width="5sp"
    app:circle_color="#222222"
    app:circle_padding="5sp"
    app:circle_radius="80sp"
    app:update_interval="100"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" />
</RelativeLayout>

我的OnCreate中没有异常,但我得到的只是一个空白的白色屏幕。我试过setImageDrawable。还尝试了传入一个新的DelayedConfirmationView实例的setContentView(View)。还尝试删除上述XML中的所有app:属性(希望会应用一些合理的默认值)。文档没有给出任何关于期望或如何使用的例子。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

sdk中有一个名为DelayedConfirmation的示例项目。如果您在SDK Manager中下载了样本 - 您可以在此处找到:sdk\samples\android-20\wearable\DelayedConfirmation

main_activity.xml档案的一部分:

    <android.support.wearable.view.DelayedConfirmationView
        android:id="@+id/delayed_confirmation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/ic_launcher"
        app:circle_color="@color/blue"
        app:circle_radius="@dimen/circle_radius"
        app:circle_radius_pressed="@dimen/circle_radius_pressed"
        app:circle_padding="@dimen/circle_padding"
        app:circle_border_width="@dimen/circle_border_normal_width"
        app:circle_border_color="@color/white"/>

所以这里唯一的额外属性是:

    app:circle_radius_pressed="@dimen/circle_radius_pressed"
在MainActivity.java类中,

与您设置的行几乎相同:

    delayedConfirmationView = (DelayedConfirmationView) findViewById(R.id.delayed_confirmation);
    delayedConfirmationView.setTotalTimeMs(NUM_SECONDS * 1000);
    ...
    delayedConfirmationView.setListener(this);

但另外他们还调用了.start()方法:

    delayedConfirmationView.start();


编辑:

我已经使用FrameLayout对DelayedConfirmationView进行了测试,它运行得很好,所以BoxInsetLayout在这里没有任何关系。
即使在复制并粘贴您的DelayedConfirmationView xml代码后,一切也正常,屏幕上会显示灰色圆圈按钮。所以我有点惊讶:) enter image description here
在使用此代码玩更多内容之后,我意识到您错误xmlns:app行:

xmlns:app="http://schemas.android.com/apk/android.support.wearable.view"

您不能指定属性所在的库的包(与您不能使用android.support.wearable.R类的方式相同 - 您需要使用自己的包中的R类。您需要使用:

xmlns:app="http://schemas.android.com/apk/res-auto"

然后在您的代码中一切正常。这就是为什么在用复制的BoxInsetLayout代码(使用正确的xmlns)替换根视图后,代码已经开始工作的按钮:)