有没有办法检测时钟是否圆?

时间:2014-03-20 06:53:33

标签: android wear-os

我可能会错过一些东西,但有没有任何标志可以知道时钟是圆形还是方形?

如果您想设计通知的背景,我可以想象这很重要。

7 个答案:

答案 0 :(得分:18)

API 23的更新:

要确定屏幕是否为圆形,您可以使用

context.getResources().getConfiguration().isScreenRound()

Android reference

或者您可以使用roundnotround资源限定符,让系统应用适当的资源,但请注意,这不适用于运行API 22或更低版本的设备

Source

感谢那些指出这种变化的人。

旧asnwer

来自google I / O talk(https://www.youtube.com/watch?v=naf_WbtFAlY#t=284):

来自SDK 20 android.view.View类有

public void setOnApplyWindowInsetsListener(OnApplyWindowInsetsListener listener)

OnApplyWindowInsetsListener有一个回调方法onApplyWindowsInset

public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets){

    if (windowInsets.isRound()){
        //Do stuff
    }

}

答案 1 :(得分:3)

您可能希望使用WatchViewStub,它包含在可穿戴支持库中。在存根中,指定roundLayout和rectLayout,正确的将根据用户的屏幕形状自动膨胀。有关如何执行此操作的示例,请参阅SDK中包含的WatchViewStub示例应用程序。

编辑: 可穿戴样本的源代码现已在线。对于这种情况,请查看WatchViewStub示例,其中"演示了如何为圆形和矩形屏幕指定不同的布局":https://developer.android.com/samples/WatchViewStub/project.html

快速参考:

在布局中:

    <android.blah.WatchViewStub
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:rectLayout="@layout/rect"
        app:roundLayout="@layout/round" />

其中rect和round是矩形和圆形显示的不同布局。

在活动中:

setContentView(R.layout.main);
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
    @Override
    public void onLayoutInflated(WatchViewStub stub) {
        mTextView = (TextView) stub.findViewById(R.id.text);
        Log.d(TAG, "TextView: " + mTextView.getText() + " view=" + mTextView);
    }
});

onLayoutInflated是可选的,但是它可以让你看到布局中膨胀的内容,因此你可以根据WatchViewStub选择膨胀的矩形(矩形或圆形)进行附加自定义。

答案 2 :(得分:3)

从API 23开始,您可以使用-round-notround资源限定符。因此,在几周内无需使用WatchViewStub

就像一个小例子一样:

<强> layout-round/example.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/round_string"/>

<强> layout-notround/example.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/square_string"/>

原因你也可以只使用一个字符串:

<强> layout/example.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/string"/>

<强> values-round/strings.xml

<resources>
    <string name="string">I am round</string>
</resources>

<强> values-notround/strings.xml

<resources>
    <string name="string">I am square</string>
</resources>

source

答案 3 :(得分:0)

我的设备中的windowinsets接近失败,所以我做了一个小技巧,丑陋但功能齐全 如果您需要检查活动内部,请在布局中添加一个隐藏的textview,其圆形布局中的值为"1",而矩形布局中的值为"0"

<TextView
    android:id="@+id/isRound"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:text="1" />

然后在活动中:

TextView isRoundText = (TextView) view.findViewById(R.id.isRound);
boolean isRound = "1".equals(isRoundText.getText());

答案 4 :(得分:0)

我想在这里加上我自己的两分钱,因为我觉得我找到了一个解决方案,虽然有点虚拟,相当简单直接。

为什么? 首先,@ IonSpin公开的两个解决方案完全正常,但第一个需要SDK 23最小,另一个是异步......

使用-round-notround限定符,只需在活动XML布局中添加虚拟空视图,该视图位于layout-round文件夹中,如下所示:

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:id="@+id/isRound"/>

然后在您的活动onCreate()中,简单地执行:

Log.d(TAG, "is not round ? " + (findViewById(R.id.isRound) == null));

它应该打印在方形智能手表上:

  

MainActivity:不圆?真

作为Android Wear上的新开发者,我觉得这个解决方案有点令人难以置信,但它确实适用于我的Sony SmartWatch 3和Virtual Round Android Wear设备。

这里唯一的缺点/权衡是你必须在所有布局中放置一个虚拟视图......

你们可以确认它对你有用吗?

答案 5 :(得分:0)

IonSpin's answer之后,以下几行就可以了:

users.map(user => {
  //user.user_name
  //user.fav_color
});

答案 6 :(得分:-1)

如果我理解正确,它将使用标准的Android资源,这意味着你可以将你的布局放在布局圈中,然后就完成了。