일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 운영체제 작동방식
- 개발 직무 변경
- 운영체제 다중모드
- android 타이머
- spring sql injection 방지
- Android Timer
- IT 포지션 변경
- spring responseEntity response stackTrace
- 백엔드 포지션 변경
- spring sql injection
- 백엔드 직무 변경
- aws ec2 scp 파일 전송
- spring 동적 쿼리 주의사항
- 개발 포지션 변경
- spring exception cause remove
- 운영체제 공룡책
- IT 직무 변경
- 운영체제 멀티 태스킹
- spring exceptionHandler reposnse stackTrace
- 운영체제 개념
- OS 자원관리
- spring exception stackTrace remove
- 운영체제 멀티 프로그래밍
- spring paging sort sql injection
- 운영체제 자원관리
- spring responseEntity response cause
- ec2 scp 파일 전송
- spring dynamic query sql injection
- spring exceptionHandler response cause
- 운영체제 커널모드
- Today
- Total
오늘도 삽질중
android textview에 밑줄 그리기 (커스텀뷰로 구현) 본문
android textview에 밑줄을 그려야하는 경우가 있는데요.
저같은 경우에는 직접 커스텀뷰로 구현하고 그걸 xml에 호출하는 방식으로 구현해 보았습니다.
1 . Java 클래스를 새로 만듭니다.
저의 경우에는 UnderlineTextView 로 이름을 지었지만 임의로 아무거나 해주셔도 상관이 없습니다.
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import cookandroid.com.grabitysubproject.R;
@SuppressLint("AppCompatCustomView")
public class UnderlineTextView extends TextView {
private int UnderlineColor;
private int UnderlineWidth;
private Paint paint;
private float width , height;
public UnderlineTextView(Context context) {
super(context);
UnderlineColor = Color.TRANSPARENT;
UnderlineWidth = 0;
}
public UnderlineTextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public UnderlineTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes( attrs , R.styleable.UnderlineTextView , defStyleAttr , 0);
UnderlineColor = typedArray.getColor(R.styleable.UnderlineTextView_underlineColor , Color.TRANSPARENT);
UnderlineWidth = typedArray.getDimensionPixelSize(R.styleable.UnderlineTextView_underlineWidth,0);
typedArray.recycle();
this.viewInit();
}
// public UnderlineTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
// super(context, attrs, defStyleAttr, defStyleRes);
// }
// @Override
// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//
// width = MeasureSpec.getSize(widthMeasureSpec);
// height = MeasureSpec.getSize(heightMeasureSpec);
//
//
// Log.e("width","===="+width);
// Log.e("height","===="+height);
//
// }
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w;
height = h;
Log.e("텍스트뷰width","==="+width);
Log.e("텍스트뷰height","==="+height);
}
private void viewInit(){
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setUnderlineText(true);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(UnderlineColor);
paint.setStrokeWidth(UnderlineWidth);
}
@Override
protected void onDraw(Canvas canvas) {
/**
* 텍스트뷰에 밑줄을 그려준다.
* drawLine 매개변수 startX , startY , stopX , stopY , paint
* 텍스트뷰의 앞부분 startX 부터 텍스트뷰의 길이만큼 그려주고
* 그리는 위치는 텍스트뷰의 하단부(height)로 그린다.
*/
canvas.drawLine(0,height,width,height,paint);
super.onDraw(canvas);
}
public int getUnderlineColor() {
return UnderlineColor;
}
public void setUnderlineColor(int underlineColor) {
UnderlineColor = underlineColor;
}
public int getUnderlineWidth() {
return UnderlineWidth;
}
public void setUnderlineWidth(int underlineWidth) {
UnderlineWidth = underlineWidth;
}
}
2. res -> values -> attrs 로 가셔서 코드를 추가해 줍니다. 만약 attrs 가 없으면 만드시면 됩니다.
attrs 로 들어가신 다음에
해당코드를 추가해 주세요.
만약 커스텀뷰 클래스 이름을 Test 로 지었다면 declare-styleable name="Test" 로 해주셔야 합니다.
<declare-styleable name="UnderlineTextView"> //만약 클래스 이름이 Test 일경우 name="Test"
<attr name="underlineColor" format="color"/>
<attr name="underlineWidth" format="dimension"/>
</declare-styleable>
이제 모든 작업이 끝났습니다.
이제 XML에서 호출하면 됩니다.
잘보시면 app:underlineWidth , app:underlineColor 라는 옵션이 있는데 이건 커스텀뷰에서 추가한 옵션입니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<cookandroid.com.grabitysubproject.Widgets.UnderlineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="텍스트뷰밑줄 1번"
android:textSize="20dp"
app:underlineWidth="2dp"
app:underlineColor="#00F" />
<cookandroid.com.grabitysubproject.Widgets.UnderlineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="20dp"
android:text="텍스트뷰밑줄 2번"
app:underlineColor="#0FF"
app:underlineWidth="5dp"
/>
<cookandroid.com.grabitysubproject.Widgets.UnderlineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="텍스트뷰밑줄 3번"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:textSize="20dp"
app:underlineColor="#F00"
app:underlineWidth="10dp"
android:layout_marginBottom="10dp"/>
</RelativeLayout>
결과화면 XML화면
결과화면 모바일화면(노트 8)
'안드로이드' 카테고리의 다른 글
android ArrayList Collections.shuffle 시 주의해야 할 점 (비교값 중복) (0) | 2019.03.17 |
---|---|
android String 배열 ArrayList 변환 (0) | 2019.03.17 |
[android] oreo notification 간단 예제 (4) | 2018.08.30 |
[android] 특수문자 \ 제거하기 (0) | 2018.08.10 |
[android] 간단한 그림판 만들기 + onDraw 위에 버튼 인식시키기 (1) | 2018.07.05 |