diff options
| author | Doug Felt <dougfelt@google.com> | 2011-06-23 16:13:18 -0700 |
|---|---|---|
| committer | Fabrice Di Meglio <fdimeglio@google.com> | 2011-06-29 16:08:42 -0700 |
| commit | c0ccf0c47c00942a9d0f2670600a8f2d4d7adb5b (patch) | |
| tree | 09e9586e01c66903cfc7c5edd728dfac63a6bb63 /core/java/android/text/Layout.java | |
| parent | cf93ed0d0ab3e158f89ff53ac302942f9deff479 (diff) | |
Support control of text alignment.
Change-Id: Id6f3682f67ba2e6811e3014cd34a281e6dd0a469
Diffstat (limited to 'core/java/android/text/Layout.java')
| -rw-r--r-- | core/java/android/text/Layout.java | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 4107c5a791d6..aae9ccffc309 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -1,4 +1,4 @@ -/* + /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -266,7 +266,7 @@ public abstract class Layout { } } - Alignment align = mAlignment; + Alignment paraAlign = mAlignment; TabStops tabStops = null; boolean tabStopsIsInitialized = false; @@ -310,10 +310,10 @@ public abstract class Layout { ParagraphStyle.class); spans = getParagraphSpans(sp, start, spanEnd, ParagraphStyle.class); - align = mAlignment; + paraAlign = mAlignment; for (int n = spans.length-1; n >= 0; n--) { if (spans[n] instanceof AlignmentSpan) { - align = ((AlignmentSpan) spans[n]).getAlignment(); + paraAlign = ((AlignmentSpan) spans[n]).getAlignment(); break; } } @@ -360,6 +360,16 @@ public abstract class Layout { tabStopsIsInitialized = true; } + // Determine whether the line aligns to normal, opposite, or center. + Alignment align = paraAlign; + if (align == Alignment.ALIGN_LEFT) { + align = (dir == DIR_LEFT_TO_RIGHT) ? + Alignment.ALIGN_NORMAL : Alignment.ALIGN_OPPOSITE; + } else if (align == Alignment.ALIGN_RIGHT) { + align = (dir == DIR_LEFT_TO_RIGHT) ? + Alignment.ALIGN_OPPOSITE : Alignment.ALIGN_NORMAL; + } + int x; if (align == Alignment.ALIGN_NORMAL) { if (dir == DIR_LEFT_TO_RIGHT) { @@ -411,7 +421,9 @@ public abstract class Layout { int dir = getParagraphDirection(line); int x; - if (align == Alignment.ALIGN_NORMAL) { + if (align == Alignment.ALIGN_LEFT) { + x = left; + } else if (align == Alignment.ALIGN_NORMAL) { if (dir == DIR_LEFT_TO_RIGHT) { x = left; } else { @@ -430,7 +442,9 @@ public abstract class Layout { } } int max = (int)getLineExtent(line, tabStops, false); - if (align == Alignment.ALIGN_OPPOSITE) { + if (align == Alignment.ALIGN_RIGHT) { + x = right - max; + } else if (align == Alignment.ALIGN_OPPOSITE) { if (dir == DIR_LEFT_TO_RIGHT) { x = right - max; } else { @@ -738,11 +752,15 @@ public abstract class Layout { int dir = getParagraphDirection(line); Alignment align = getParagraphAlignment(line); - if (align == Alignment.ALIGN_NORMAL) { + if (align == Alignment.ALIGN_LEFT) { + return 0; + } else if (align == Alignment.ALIGN_NORMAL) { if (dir == DIR_RIGHT_TO_LEFT) return getParagraphRight(line) - getLineMax(line); else return 0; + } else if (align == Alignment.ALIGN_RIGHT) { + return mWidth - getLineMax(line); } else if (align == Alignment.ALIGN_OPPOSITE) { if (dir == DIR_RIGHT_TO_LEFT) return 0; @@ -765,11 +783,15 @@ public abstract class Layout { int dir = getParagraphDirection(line); Alignment align = getParagraphAlignment(line); - if (align == Alignment.ALIGN_NORMAL) { + if (align == Alignment.ALIGN_LEFT) { + return getParagraphLeft(line) + getLineMax(line); + } else if (align == Alignment.ALIGN_NORMAL) { if (dir == DIR_RIGHT_TO_LEFT) return mWidth; else return getParagraphLeft(line) + getLineMax(line); + } else if (align == Alignment.ALIGN_RIGHT) { + return mWidth; } else if (align == Alignment.ALIGN_OPPOSITE) { if (dir == DIR_RIGHT_TO_LEFT) return getLineMax(line); @@ -1765,8 +1787,10 @@ public abstract class Layout { ALIGN_NORMAL, ALIGN_OPPOSITE, ALIGN_CENTER, - // XXX ALIGN_LEFT, - // XXX ALIGN_RIGHT, + /** @hide */ + ALIGN_LEFT, + /** @hide */ + ALIGN_RIGHT, } private static final int TAB_INCREMENT = 20; |
