diff options
Diffstat (limited to 'core/tests/coretests/src/android/widget/LabelView.java')
-rw-r--r-- | core/tests/coretests/src/android/widget/LabelView.java | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/core/tests/coretests/src/android/widget/LabelView.java b/core/tests/coretests/src/android/widget/LabelView.java new file mode 100644 index 0000000..4661c01 --- /dev/null +++ b/core/tests/coretests/src/android/widget/LabelView.java @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.view.View; + +/** + * Example of how to write a custom subclass of View. LabelView + * is used to draw simple text views. Note that it does not handle + * styled text or right-to-left writing systems. + * + */ +public class LabelView extends View { + /** + * Constructor. This version is only needed if you will be instantiating + * the object manually (not from a layout XML file). + * @param context the application environment + */ + public LabelView(Context context) { + super(context); + initLabelView(); + } + + /** + * Construct object, initializing with any attributes we understand from a + * layout file. These attributes are defined in + * SDK/assets/res/any/classes.xml. + * + * @see android.view.View#View(android.content.Context, android.util.AttributeSet) + public LabelView(Context context, AttributeSet attrs) { + super(context, attrs); + initLabelView(); + + Resources.StyledAttributes a = context.obtainStyledAttributes(attrs, + R.styleable.LabelView); + + CharSequence s = a.getString(R.styleable.LabelView_text); + if (s != null) { + setText(s.toString()); + } + + ColorStateList textColor = a.getColorList(R.styleable. + LabelView_textColor); + if (textColor != null) { + setTextColor(textColor.getDefaultColor(0)); + } + + int textSize = a.getInt(R.styleable.LabelView_textSize, 0); + if (textSize > 0) { + setTextSize(textSize); + } + + a.recycle(); + } + + */ + private void initLabelView() { + mTextPaint = new Paint(); + mTextPaint.setAntiAlias(true); + mTextPaint.setTextSize(16); + mTextPaint.setColor(0xFF000000); + + mPaddingLeft = 3; + mPaddingTop = 3; + mPaddingRight = 3; + mPaddingBottom = 3; + } + + /** + * Sets the text to display in this label + * @param text The text to display. This will be drawn as one line. + */ + public void setText(String text) { + mText = text; + requestLayout(); + invalidate(); + } + + /** + * Sets the text size for this label + * @param size Font size + */ + public void setTextSize(int size) { + mTextPaint.setTextSize(size); + requestLayout(); + invalidate(); + } + + /** + * Sets the text color for this label + * @param color ARGB value for the text + */ + public void setTextColor(int color) { + mTextPaint.setColor(color); + invalidate(); + } + + + /** + * @see android.view.View#measure(int, int) + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(measureWidth(widthMeasureSpec), + measureHeight(heightMeasureSpec)); + } + + /** + * Determines the width of this view + * @param measureSpec A measureSpec packed into an int + * @return The width of the view, honoring constraints from measureSpec + */ + private int measureWidth(int measureSpec) { + int result; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + + if (specMode == MeasureSpec.EXACTLY) { + // We were told how big to be + result = specSize; + } else { + // Measure the text + result = (int) mTextPaint.measureText(mText) + mPaddingLeft + + mPaddingRight; + if (specMode == MeasureSpec.AT_MOST) { + // Respect AT_MOST value if that was what is called for by measureSpec + result = Math.min(result, specSize); + } + } + + return result; + } + + /** + * Determines the height of this view + * @param measureSpec A measureSpec packed into an int + * @return The height of the view, honoring constraints from measureSpec + */ + private int measureHeight(int measureSpec) { + int result; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + + mAscent = (int) mTextPaint.ascent(); + if (specMode == MeasureSpec.EXACTLY) { + // We were told how big to be + result = specSize; + } else { + // Measure the text (beware: ascent is a negative number) + result = (int) (-mAscent + mTextPaint.descent()) + mPaddingTop + + mPaddingBottom; + if (specMode == MeasureSpec.AT_MOST) { + // Respect AT_MOST value if that was what is called for by measureSpec + result = Math.min(result, specSize); + } + } + return result; + } + + /** + * Render the text + * + * @see android.view.View#onDraw(android.graphics.Canvas) + */ + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.drawText(mText, mPaddingLeft, mPaddingTop - mAscent, mTextPaint); + } + + private Paint mTextPaint; + private String mText; + private int mAscent; +} |