Android Wear 圆形模拟器充气方形布局
Posted
技术标签:
【中文标题】Android Wear 圆形模拟器充气方形布局【英文标题】:Android Wear Round Emulator inflating Square Layout 【发布时间】:2015-04-29 13:23:16 【问题描述】:我首先想说的是,我知道这里已经有类似的问题了,但没有一个能解决这个问题
我在 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)
// ...
);
我还需要做些什么来告诉应用设备是圆形的吗?还是模拟器的BUG?
【问题讨论】:
【参考方案1】:因此,您可以通过设置自定义视图来实现。假设您要为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 文件。如果您希望它们具有相同的内容,请在每个文件中为所有视图的子项使用包含标记。
【讨论】:
以上是关于Android Wear 圆形模拟器充气方形布局的主要内容,如果未能解决你的问题,请参考以下文章