【问题标题】:Android Wear Round Emulator inflating Square LayoutAndroid Wear 圆形模拟器充气方形布局
【发布时间】: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?

【问题讨论】:

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


    【解决方案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 文件。如果您希望它们具有相同的内容,请在每个文件中为所有视图的子项使用包含标记。

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多