multiline text display
This commit is contained in:
parent
346032a33b
commit
1530be9ca3
@ -10,5 +10,7 @@
|
|||||||
xmlns:a="http://schemas.android.com/apk/res/android"
|
xmlns:a="http://schemas.android.com/apk/res/android"
|
||||||
a:id="@+id/calculatorDisplay"
|
a:id="@+id/calculatorDisplay"
|
||||||
style="@style/display_style"
|
style="@style/display_style"
|
||||||
a:scrollHorizontally="true"
|
a:inputType="textMultiLine"
|
||||||
|
a:maxLines="3"
|
||||||
|
a:scrollHorizontally="false"
|
||||||
a:scrollbars="none"/>
|
a:scrollbars="none"/>
|
@ -58,7 +58,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="display_style" parent="display_style_parent">
|
<style name="display_style" parent="display_style_parent">
|
||||||
<item name="android:gravity">center_vertical|right</item>
|
<item name="android:gravity">top|right</item>
|
||||||
<item name="android:layout_width">fill_parent</item>
|
<item name="android:layout_width">fill_parent</item>
|
||||||
<item name="android:layout_height">fill_parent</item>
|
<item name="android:layout_height">fill_parent</item>
|
||||||
</style>
|
</style>
|
||||||
|
@ -84,7 +84,7 @@ public enum CalculatorModel implements CursorControl, HistoryControl<CalculatorH
|
|||||||
final CharSequence text = display.getText();
|
final CharSequence text = display.getText();
|
||||||
if (!StringUtils.isEmpty(text)) {
|
if (!StringUtils.isEmpty(text)) {
|
||||||
final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE);
|
final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE);
|
||||||
clipboard.setText(text);
|
clipboard.setText(text.toString());
|
||||||
Toast.makeText(context, context.getText(R.string.c_result_copied), Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, context.getText(R.string.c_result_copied), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,16 +33,16 @@ public class AutoResizeTextView extends TextView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Off screen canvas for text size rendering
|
// Off screen canvas for text size rendering
|
||||||
private static final Canvas sTextResizeCanvas = new Canvas();
|
private static final Canvas textResizeCanvas = new Canvas();
|
||||||
|
|
||||||
// Our ellipse string
|
// Our ellipse string
|
||||||
private static final String mEllipsis = "...";
|
private static final String ellipsis = "...";
|
||||||
|
|
||||||
// Registered resize listener
|
// Registered resize listener
|
||||||
private OnTextResizeListener mTextResizeListener;
|
private OnTextResizeListener textResizeListener;
|
||||||
|
|
||||||
// Flag for text and/or size changes to force a resize
|
// Flag for text and/or size changes to force a resize
|
||||||
private boolean mNeedsResize = false;
|
private boolean needsResize = false;
|
||||||
|
|
||||||
// Lower bounds for text size
|
// Lower bounds for text size
|
||||||
private float minTextSize = MIN_TEXT_SIZE;
|
private float minTextSize = MIN_TEXT_SIZE;
|
||||||
@ -78,7 +78,7 @@ public class AutoResizeTextView extends TextView {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) {
|
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) {
|
||||||
mNeedsResize = true;
|
needsResize = true;
|
||||||
// Since this view may be reused, it is good to resetInterpreter the text size
|
// Since this view may be reused, it is good to resetInterpreter the text size
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ public class AutoResizeTextView extends TextView {
|
|||||||
@Override
|
@Override
|
||||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||||
if (w != oldw || h != oldh) {
|
if (w != oldw || h != oldh) {
|
||||||
mNeedsResize = true;
|
needsResize = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public class AutoResizeTextView extends TextView {
|
|||||||
* @param listener
|
* @param listener
|
||||||
*/
|
*/
|
||||||
public void setOnResizeListener(OnTextResizeListener listener) {
|
public void setOnResizeListener(OnTextResizeListener listener) {
|
||||||
mTextResizeListener = listener;
|
textResizeListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,7 +163,7 @@ public class AutoResizeTextView extends TextView {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
if (changed || mNeedsResize) {
|
if (changed || needsResize) {
|
||||||
resizeText(right - left, bottom - top);
|
resizeText(right - left, bottom - top);
|
||||||
}
|
}
|
||||||
super.onLayout(changed, left, top, right, bottom);
|
super.onLayout(changed, left, top, right, bottom);
|
||||||
@ -228,33 +228,33 @@ public class AutoResizeTextView extends TextView {
|
|||||||
if (addEllipsis && newTextSize == minTextSize && newTextHeight > height) {
|
if (addEllipsis && newTextSize == minTextSize && newTextHeight > height) {
|
||||||
// Draw using a static layout
|
// Draw using a static layout
|
||||||
StaticLayout layout = new StaticLayout(text, textPaint, width, Alignment.ALIGN_NORMAL, spacingMult, spacingAdd, false);
|
StaticLayout layout = new StaticLayout(text, textPaint, width, Alignment.ALIGN_NORMAL, spacingMult, spacingAdd, false);
|
||||||
layout.draw(sTextResizeCanvas);
|
layout.draw(textResizeCanvas);
|
||||||
int lastLine = layout.getLineForVertical(height) - 1;
|
int lastLine = layout.getLineForVertical(height) - 1;
|
||||||
int start = layout.getLineStart(lastLine);
|
int start = layout.getLineStart(lastLine);
|
||||||
int end = layout.getLineEnd(lastLine);
|
int end = layout.getLineEnd(lastLine);
|
||||||
float lineWidth = layout.getLineWidth(lastLine);
|
float lineWidth = layout.getLineWidth(lastLine);
|
||||||
float ellipseWidth = textPaint.measureText(mEllipsis);
|
float ellipseWidth = textPaint.measureText(ellipsis);
|
||||||
|
|
||||||
// Trim characters off until we have enough room to draw the ellipsis
|
// Trim characters off until we have enough room to draw the ellipsis
|
||||||
while (width < lineWidth + ellipseWidth) {
|
while (width < lineWidth + ellipseWidth) {
|
||||||
lineWidth = textPaint.measureText(text.subSequence(start, --end + 1).toString());
|
lineWidth = textPaint.measureText(text.subSequence(start, --end + 1).toString());
|
||||||
}
|
}
|
||||||
setText(text.subSequence(0, end) + mEllipsis);
|
setText(text.subSequence(0, end) + ellipsis);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some devices try to auto adjust line spacing, so force default line spacing
|
// Some devices try to auto adjust line spacing, so force default line spacing
|
||||||
// and invalidate the layout as a side effect
|
// and invalidate the layout as a side effect
|
||||||
textPaint.setTextSize(newTextSize);
|
textPaint.setTextSize(newTextSize);
|
||||||
//setLineSpacing(spacingAdd, spacingMult);
|
setLineSpacing(spacingAdd, spacingMult);
|
||||||
|
|
||||||
// Notify the listener if registered
|
// Notify the listener if registered
|
||||||
if (mTextResizeListener != null) {
|
if (textResizeListener != null) {
|
||||||
mTextResizeListener.onTextResize(this, oldTextSize, newTextSize);
|
textResizeListener.onTextResize(this, oldTextSize, newTextSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset force resize flag
|
// Reset force resize flag
|
||||||
mNeedsResize = false;
|
needsResize = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the text size of the text paint object and use a static layout to render text off screen before measuring
|
// Set the text size of the text paint object and use a static layout to render text off screen before measuring
|
||||||
@ -263,7 +263,7 @@ public class AutoResizeTextView extends TextView {
|
|||||||
paint.setTextSize(textSize);
|
paint.setTextSize(textSize);
|
||||||
// Draw using a static layout
|
// Draw using a static layout
|
||||||
StaticLayout layout = new StaticLayout(source, paint, width, Alignment.ALIGN_NORMAL, spacingMult, spacingAdd, false);
|
StaticLayout layout = new StaticLayout(source, paint, width, Alignment.ALIGN_NORMAL, spacingMult, spacingAdd, false);
|
||||||
layout.draw(sTextResizeCanvas);
|
layout.draw(textResizeCanvas);
|
||||||
return layout.getHeight();
|
return layout.getHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user