没有CardBuilder.Layout.EMBED_INSIDE的Google Glass Immersion自定义布局

时间:2014-11-20 21:27:07

标签: android android-layout google-glass

我正在尝试通过自定义XML布局构建沉浸式。

我的理解是如果我使用CardBuilder,我需要embed_inside但是我想用整个屏幕和我的XML布局。

之前看来这可能是使用卡,但该界面已被折旧。

我可能只是缺少一个基本的Glass概念,但到目前为止我读过的每个示例或文档都通过CardBuilder.Layout访问并使用预定义的玻璃布局。

2 个答案:

答案 0 :(得分:4)

我自己也遇到过这个问题,而且我能够很轻松地解决这个问题。 没有太多关于它的文档,这是令人失望的。

由于Card类已弃用且CardBuilder.EMBED_INSIDE相当有限。您拥有的唯一选择是使用自定义视图,如前所述。但是你不需要手动充气! 如果您使用的是CardScrollView和CardScrollAdapter。您可以在“活动”中执行以下操作:

private CardScrollView _cardScroller;
private ArrayList<View> _cardsList;
private MyCustomView _myView;
@Override
protected void onCreate(Bundle bundle) {
    _cardsList = new ArrayList<View>();
    _myView= new MyCustomView (this);
    _cardsList.add(_myView);
    _cardScroller = new CardScrollView(this) ;
    MainCardsScrollAdapter adapter = new MainCardsScrollAdapter(_cardsList);
    _cardScroller.setAdapter(adapter);
    _cardScroller.activate();
    setContentView(_cardScroller); 
}

现在我使用了自定义CardScrollAdapter,因为它现在有视图而不是CardBuilders:

public class MainCardsScrollAdapter extends CardScrollAdapter
{
    ArrayList<View> _cardsList;
    public MainCardsScrollAdapter(ArrayList<View> cardsList)
    {
        _cardsList = cardsList;
    }

    @Override
    public int getCount() {
        return _cardsList.size();
    }

    @Override
    public Object getItem(int i) {
        return _cardsList.get(i);
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        return _cardsList.get(i);
    }

    @Override
    public int getPosition(Object o) {
        return _cardsList.indexOf(o);
    }

    @Override
    public int getViewTypeCount() {
        return CardBuilder.getViewTypeCount();
    }

    @Override
    public int getItemViewType(int position){
        return 0;//should be changed, it's just an example
    }
} 

现在只需在xml中创建所需的布局。 并创建自定义视图:     公共类MyCustomView扩展了FrameLayout {

    public MyCustomView (Context context) {
        super(context);
        initView();
    }

    private void initView()
    {
        View view = inflate(getContext(), R.layout.live_card, null);
        addView(view);
    }
}

您可以根据需要添加任意数量的自定义视图。 我希望它有所帮助

答案 1 :(得分:2)

如果您更喜欢使用自己的自定义布局,则不需要使用CardBuilder:请务必遵循我们的design guidelines以确保您符合我们的规范。

要使用自定义布局,只需按正常情况对View进行充气,然后在应用程序中使用。

对于Activity,你可以这样:

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.my_custom_layout);
}

如果您使用CardScrollView,只需修改CardScrollAdapter的{​​{1}}方法即可返回getView

View