如何在自定义Android Wear应用中扩展卡?

时间:2014-11-19 16:24:15

标签: android wear-os

有谁知道如何扩展卡?我跟随the official developer guide to create a card进入我的自定义佩戴应用,但我还是无法扩展该卡。有我的onCreate方法代码提取:


    CardScrollView scv = (CardScrollView) findViewById(R.id.scp_credits_scroll);
    scv.setCardGravity(Gravity.BOTTOM);
    CardFrame cf = (CardFrame) findViewById(R.id.scp_credits_card_frame);
    cf.setExpansionEnabled(true);
    cf.setExpansionDirection(CardFrame.EXPAND_DOWN);
    cf.setExpansionFactor(EXPANSION_FACTOR);

并且EXPANSION_FACTOR常量设置为50.0。

有我的布局:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.wearable.view.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.wearable.view.CardScrollView
        android:id="@+id/scp_credits_scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_box="bottom"
        android:background="@color/white">

        <android.support.wearable.view.CardFrame
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/scp_credits_card_frame">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                style="@style/Pager">

                <TextView
                    android:id="@+id/scp_card_title_text"
                    style="@style/PagerTitle"
                    android:text="@string/scp_credits"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="@dimen/scp_card_margin" />
                <TextView
                    android:id="@+id/scp_credits_card_content_text"
                    style="@style/PagerMedium"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="@dimen/scp_card_margin" />
            </LinearLayout>
        </android.support.wearable.view.CardFrame>
    </android.support.wearable.view.CardScrollView>
</android.support.wearable.view.BoxInsetLayout>

3 个答案:

答案 0 :(得分:1)

我遇到过类似的问题。我在代码中进行了以下更改:

    CardScrollView cardScrollView = (CardScrollView)view.findViewById(R.id.card_scroll_view);
    cardScrollView.setExpansionEnabled(true);
    cardScrollView.setCardGravity(Gravity.BOTTOM);
    cardScrollView.setExpansionFactor(10f);
    cardScrollView.setExpansionDirection(CardFrame.EXPAND_DOWN);
    CardFrame cardFrame = (CardFrame) view.findViewById(R.id.card_frame);
    cardFrame.setExpansionEnabled(true);
    cardFrame.setExpansionDirection(CardFrame.EXPAND_DOWN);
    cardFrame.setExpansionFactor(10f);

尽管如此,仅仅添加这些更改并不足以使卡可扩展。所以,我怀疑CardScrollViewBoxInsetLayout的容器可能是罪魁祸首。当我删除BoxInsetLayout并将CardScrollView作为根元素时,该卡变得可扩展。希望这也适用于你的情况。

答案 1 :(得分:0)

如果您希望扩展您的卡,请不要设置扩展因子并使用cf.setExpansionEnabled(true)。这应该将您的所有卡片扩展到所需的尺寸以显示所有内容。

另一方面,如果你试图达到这样的目的:

  1. 从所有已弃牌的卡开始
  2. 向下滑动直至您决定展开某张卡片
  3. 点击展开
  4. 向下滚动直到您全部阅读,然后继续滚动以移动到下一张卡
  5. 我找不到复制这种模式的方法,即使导航应该像这样发生,我也不确定。在Google Keep应用中,您可以向下滑动卡片(其扩展系数为1.0f),但如果您要扩展卡片,则会引导您进入新的活动,您可以在其中阅读整个内容。因此,在向下滚动到内容的末尾后,您无法继续向下滚动到下一张卡片。为此,您需要返回上一个屏幕。

    我不确定你想要达到什么目的,但我希望这些信息可以帮助你。

答案 2 :(得分:0)

我找到了一个简单的解决方案/解决方法。

这是我的活动:ExampleCardActivity.java

// ...
import android.support.wearable.view.CardFragment;
import android.support.wearable.view.FragmentGridPagerAdapter;
import android.support.wearable.view.GridViewPager;

public class ExampleCardActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example_card);
        GridViewPager gridViewPager = (GridViewPager) findViewById(R.id.gridViewPager);
        gridViewPager.setAdapter(new FragmentGridPagerAdapter(getFragmentManager()) {
            @Override
            public Fragment getFragment(int row, int col) {
                return CardFragment.create("Title", "This\nis\na\nvery\nvery\nlong\ndescription\nwith\nmany\nlines.\nTry it!");
            }

            @Override
            public int getRowCount() {
                return 1;
            }

            @Override
            public int getColumnCount(int rowNum) {
                return 1;
            }
        });
    }
}

和我的布局:activity_example_card.xml

<android.support.wearable.view.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.wearable.view.GridViewPager
        android:id="@+id/gridViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:keepScreenOn="true" />
</android.support.wearable.view.BoxInsetLayout>

现在滚动效果很好!