WatchViewStub圆形xml但加载方形布局

时间:2015-03-29 17:05:37

标签: android wear-os

我是安卓玩家的一个菜鸟,到目前为止一直很好。 我已成功创建了我的第一个hello world应用程序并在我的LG G手表R上运行。

我遇到的问题如下: 我正在开发人员网站中使用WatchViewStub,WatchViewStub假设检测应用程序运行的屏幕类型。 但显然WatchViewStub只做了它想做的一半,这意味着应用程序使用正确的文本使用正确的xml文件“round_activity”进行部署,但它仍然在设备上以方形布局显示。

据我所知,WatchViewStub假设在检测圆形显示时自动修复文本。但在我的情况下,它从右侧round_activity xml文件中获取正确的文本,但它以方形格式显示。 这是我的代码:

MainActivity:

public class MainActivity extends Activity {

    public TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        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) {
                // Now you can access your views

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

            }
        });
    }
}

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.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">

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

</RelativeLayout>

square_activity.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">

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

    </RelativeLayout>

我正确显示我的hello圆形世界文本的唯一方法是将其填充到xml中心。

有人知道为什么会这样吗? 提前谢谢你们的帮助

3 个答案:

答案 0 :(得分:0)

更改round_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.wearable.view.BoxInsetLayout 
    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" >

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    tools:deviceIds="wear_square">

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

</RelativeLayout>
</android.support.wearable.view.BoxInsetLayout>

答案 1 :(得分:0)

同一手表出现同样问题...通过将Theme更改为默认值来解决此问题。圆形/方形检测由主题完成。

确保您的清单中的主题是: android:theme="@android:style/Theme.DeviceDefault"

答案 2 :(得分:-1)

您可以使用可穿戴支持库中的BoxInsetLayout

  

BoxInsetLayout是一个屏幕形状感知的FrameLayout,它可以使用layout_boxattribute将其子项放在圆形屏幕的中心方框中。