2014-11-20 1 views
0

Я пытаюсь создать погружение с помощью настраиваемого XML-макета.Google Glass Immersion Custom Layout без CardBuilder.Layout.EMBED_INSIDE

Мое понимание, если я использую CardBuilder, мне нужно будет внедрить_индексию, но я хотел использовать весь экран с моим XML-макетом.

Похоже, что это было возможно с использованием карты, однако этот интерфейс был обесценен.

Возможно, мне просто не хватает базовой концепции Glass, но каждый пример или документ, который я прочитал до сих пор, получают через CardBuilder.Layout и используют предопределенные макеты стекла.

ответ

2

Вам не нужно использовать CardBuilder, если вы предпочитаете использовать свой собственный макет: следите за нашими design guidelines, чтобы убедиться, что вы соответствуете нашим спецификациям.

Чтобы использовать свой собственный макет, просто надуйте View, как обычно и используете в своем приложении.

Для Activity, вы могли бы что-то вроде:

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

Если вы используете CardScrollView, просто изменить getView СПОСОБА CardScrollAdapter «s, чтобы вернуть View:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // You can inflate the View using a LayoutInflater: 
    //  LayoutInflater.from(mContext).inflate(R.layout.my_custom_layout, parent); 
    return mCustomView; 
} 
4

Я сама эта проблема, и я смог решить ее очень легко. Существует не так много документации об этом, что разочаровывает.

Поскольку класс карты устарел и 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); 
    } 
} 

Вы можете добавить столько пользовательских представлений, как вам нравится. Надеюсь, это поможет