Android Wear圆形模拟器充气广场布局

时间:2015-02-26 23:25:06

标签: android android-layout android-emulator wear-os

我首先要说的是,我知道这里已经存在类似这样的问题,但没有人解决这个问题

我在Ubuntu上使用Round Android Wear Emulator(Android 5.0.1和x86)。屏幕显示为圆形,模拟器上的所有其他功能(设置表盘,卡片)显示为圆形手表上的功能。但是在我的应用程序中,我使用的是WatchViewStub,尽管我在布局中指定了以下内容,但圆形模拟器正在为方形布局充气:

app:rectLayout="@layout/rect_activity_setup"
app:roundLayout="@layout/round_activity_setup"

这是我的活动代码:

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

    final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
    stub.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
      @Override
      public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
        stub.onApplyWindowInsets(windowInsets);
        return windowInsets;
      }
    });
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
      @Override
      public void onLayoutInflated(WatchViewStub stub) {
        // ...
      }
    });
  }

我还需要做些什么才能告诉应用该设备是圆形的吗?或者这是模拟器的错误?

1 个答案:

答案 0 :(得分:0)

所以你可以通过设置自定义视图来实现。我们假设你要夸大FrameLayout。你会有两个观点。 RoundFrameLayout.java和RectFrameLayout.java。然后让他们都实现以下

public interface RoundAware {
    boolean isRound();
}

RoundFrameLayout将如下所示。

public class RoundFrameLayout extends FrameLayout implements RoundAware {
    public RoundFrameLayout(Context context) {
        super(context);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public boolean isRound() {
        return true;
    }
}

RectFrameLayout将如下所示。

public class RectFrameLayout extends FrameLayout implements RoundAware {
    public RoundFrameLayout(Context context) {
        super(context);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public boolean isRound() {
        return false;
    }
}

然后在RoundFrameLayout和RectFrameLayout xml文件中正确指向视图存根的圆形和矩形布局。如果您希望他们拥有相同的内容,请在每个文件中为所有视图的子项使用includes标记。