因此,您可能知道Google Glass上的屏幕空間有限。 Mirror API有一個很好的「閱讀更多」功能,可以將長文本卡片轉換爲多張卡片,用戶可以通過該卡片進行滾動。我一直試圖用GDK中的文字來達到同樣的效果,但無濟於事。無法在GDK卡上顯示「更多信息」
所以問題是,很簡單,我如何使用GDK向用戶顯示長文本?例如,這對閱讀新聞報道非常重要。
更新:沒有找到任何可用的東西,我創建了一個活動,自動將文本分成多張卡片。這並不理想,所以希望有人可以改進它。接口是一類意圖和text
額外的啓動活動:
case R.id.read_more:
intent = new Intent(this, ReadMoreActivity.class);
intent.putExtra(ReadMoreActivity.TEXT, text);
startActivity(intent);
return true;
這將調用ReadMoreActivity
類爲需要使全文可以被看作打破了文成儘可能多的卡。這是實現的途徑,我不建議做了整部小說這種方式,但它似乎工作長達十幾個或更多的卡價值的文字:
public class ReadMoreActivity extends Activity {
public static final String TEXT = "text";
private static final boolean DEBUG = true;
private static final String TAG = ReadMoreActivity.class.getSimpleName();
private static final float SPACING_MULT = 1.0f;
private static final float SPACING_ADD = 1.0f;
private static final boolean INCLUDE_PAD = false;
private String mText;
private CardScrollView mCardScrollView;
private TextCardScrollAdapter mAdapter;
private List<Card> mCards;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.containsKey(TEXT))
mText = savedInstanceState.getString(TEXT);
else if (getIntent() != null && getIntent().hasExtra(TEXT))
mText = getIntent().getStringExtra(TEXT);
else {
Log.e(TAG, "no text found");
finish();
return;
}
createCardsFromText();
mAdapter = new TextCardScrollAdapter();
View rootLayout = getLayoutInflater().inflate(R.layout.card_scroll_layout, null);
mCardScrollView = (CardScrollView)rootLayout.findViewById(R.id.card_scroll_view);
mCardScrollView.setAdapter(mAdapter);
mCardScrollView.activate();
setContentView(rootLayout);
}
private void createCardsFromText() {
int textSize = getResources().getDimensionPixelSize(R.dimen.card_main_layout_main_min_textSize);
int maxWidth = getResources().getDimensionPixelSize(R.dimen.card_main_layout_main_width);
int maxHeight = getResources().getDimensionPixelSize(R.dimen.card_main_layout_main_height);
TextView tv = new TextView(this);
tv.setTextSize(textSize);
tv.setText(mText);
StaticLayout measure = new StaticLayout(tv.getText(), tv.getPaint(),
maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 1.0f, false);
int numLines = measure.getLineCount();
if (DEBUG) Log.i(TAG, "calculated lines=" + numLines + " for text=[" + mText + "]");
int linesPerCard = maxHeight/textSize;
int numFullCards = numLines/linesPerCard;
int numCards = numFullCards + (numLines % linesPerCard > 0 ? 1 : 0);
mCards = new ArrayList<Card>();
for (int cardNum = 0; cardNum < numCards; cardNum++) {
int startLine = cardNum * linesPerCard;
int nextStartLine = startLine + linesPerCard;
int startOffset = measure.getLineStart(startLine);
int endOffset = (nextStartLine < numLines) ? measure.getLineStart(nextStartLine) : mText.length();
String cardText = mText.substring(startOffset, endOffset);
Card card = new Card(this);
card.setText(cardText);
String cardFootnote = getString(R.string.read_more_format, cardNum + 1, numCards);
card.setFootnote(cardFootnote);
mCards.add(card);
}
}
private class TextCardScrollAdapter extends CardScrollAdapter {
@Override
public int findIdPosition(Object id) {
return -1;
}
@Override
public int findItemPosition(Object item) {
return mCards.indexOf(item);
}
@Override
public int getCount() {
return mCards.size();
}
@Override
public Object getItem(int position) {
return mCards.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mCards.get(position).toView();
}
}
}
佈局文件card_scroll_layout.xml' for this is pretty simple, just a wrapper around the
CardScrollView`:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<com.google.android.glass.widget.CardScrollView
android:id="@+id/card_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
尺寸文件dimens.xml
需要知道卡的尺寸爲文計算:
<dimen name="card_main_layout_main_width">560px</dimen>
<dimen name="card_main_layout_main_height">240px</dimen>
<dimen name="card_main_layout_main_min_textSize">30px</dimen>
<dimen name="card_main_layout_footnote_width">560px</dimen>
<dimen name="card_main_layout_footnote_height">40px</dimen>
而且在你strings.xml
你需要小號omething的註腳,因此用戶知道自己在閱讀位置更多:
<string name="read_more_format">read more ~ page %1$d of %2$d</string>
GDK中的任何更新都可以在卡片生成器中顯示ling文本? –