我首先要说的是,我知道这里已经存在类似这样的问题,但没有人解决这个问题
我在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) {
// ...
}
});
}
我还需要做些什么才能告诉应用该设备是圆形的吗?或者这是模拟器的错误?
答案 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标记。