programing

Android TextView 주변에 테두리를 두는 방법은 무엇입니까?

javamemo 2023. 6. 19. 21:05
반응형

Android TextView 주변에 테두리를 두는 방법은 무엇입니까?

Android 주변에 테두리를 그리는 것이 가능합니까?TextView?

도형 그리기 가능(사각형)을 뷰의 배경으로 설정할 수 있습니다.

<TextView android:text="Some text" android:background="@drawable/back"/>

그리고 직사각형 drawable back.xml(res/drawable 폴더에 저장):

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="@android:color/white" />
   <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

사용할 수 있습니다.@android:color/transparent단색이 투명한 배경을 가질 수 있도록 합니다.또한 패딩을 사용하여 텍스트와 테두리를 구분할 수 있습니다.자세한 내용은 http://developer.android.com/guide/topics/resources/drawable-resource.html 을 참조하십시오.

몇 가지 다른 (비프로그램적) 방법을 요약해 보겠습니다.

도형 그리기 가능 사용

다음을 그리기 가능한 폴더(예: my_border.xml)에 XML 파일로 저장합니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- View background color -->
    <solid
        android:color="@color/background_color" >
    </solid>

    <!-- View border color and width -->
    <stroke
        android:width="1dp"
        android:color="@color/border_color" >
    </stroke>

    <!-- The radius makes the corners rounded -->
    <corners
        android:radius="2dp"   >
    </corners>

</shape>

그런 다음 텍스트 보기의 배경으로 설정합니다.

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_border" />

추가 도움말:

9-patch 사용

9-patch는 확장 가능한 배경 이미지입니다.테두리가 있는 이미지를 만들면 텍스트 보기에 테두리가 표시됩니다.이미지를 만든 다음 텍스트 보기에서 배경으로 설정하기만 하면 됩니다.

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_ninepatch_image" />

다음 링크는 9개 패치 이미지를 만드는 방법을 보여줍니다.

만약 제가 맨 위 테두리만 원한다면요?

도면층 리스트 사용

도면층 리스트를 사용하여 직사각형 두 개를 서로 겹쳐 쌓을 수 있습니다.두 번째 직사각형을 첫 번째 직사각형보다 조금 작게 만들면 테두리 효과를 만들 수 있습니다.첫 번째(아래) 직사각형은 테두리 색이고 두 번째 직사각형은 배경 색입니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Lower rectangle (border color) -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/border_color" />
        </shape>
    </item>

    <!-- Upper rectangle (background color) -->
    <item android:top="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/background_color" />
        </shape>
    </item>
</layer-list>

android:top="2dp"위쪽을 2dp씩 오프셋합니다.이렇게 하면 첫 번째(아래쪽) 직사각형이 표시되어 테두리 효과를 얻을 수 있습니다.에는 TextView 이할있수배다니와 동일한 으로 할 수 .shape그림 그리기가 위에서 수행되었습니다.

다음은 도면층 목록에 대한 몇 가지 추가 링크입니다.

9-patch 사용

테두리 하나로 9개의 패치 이미지를 만들 수 있습니다.다른 모든 것은 위에서 논의한 것과 같습니다.

보기 사용

이것은 일종의 속임수이지만 두 보기 사이에 구분 기호를 추가하거나 단일 텍스트 보기에 테두리를 추가해야 하는 경우에 효과적입니다.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- This adds a border between the TextViews -->
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@android:color/black" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

다음은 몇 가지 링크입니다.

간단한 방법은 텍스트 보기에 대한 보기를 추가하는 것입니다.맨 아래 테두리 선의 예:

<LinearLayout android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:text="@string/title"
        android:id="@+id/title_label"
        android:gravity="center_vertical"/>
    <View
        android:layout_width="fill_parent"
        android:layout_height="0.2dp"
        android:id="@+id/separator"
        android:visibility="visible"
        android:background="@android:color/darker_gray"/>

</LinearLayout>

다른 방향 테두리의 경우 구분 기호 뷰의 위치를 조정하십시오.

텍스트 보기를 확장하고 테두리를 수동으로 그려서 이 문제를 해결했습니다.테두리가 점선인지 점선인지 선택할 수 있도록 추가했습니다.

public class BorderedTextView extends TextView {
        private Paint paint = new Paint();
        public static final int BORDER_TOP = 0x00000001;
        public static final int BORDER_RIGHT = 0x00000002;
        public static final int BORDER_BOTTOM = 0x00000004;
        public static final int BORDER_LEFT = 0x00000008;

        private Border[] borders;

        public BorderedTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }

        public BorderedTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public BorderedTextView(Context context) {
            super(context);
            init();
        }
        private void init(){
            paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(4);        
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if(borders == null) return;

            for(Border border : borders){
                paint.setColor(border.getColor());
                paint.setStrokeWidth(border.getWidth());

                if(border.getStyle() == BORDER_TOP){
                    canvas.drawLine(0, 0, getWidth(), 0, paint);                
                } else
                if(border.getStyle() == BORDER_RIGHT){
                    canvas.drawLine(getWidth(), 0, getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_BOTTOM){
                    canvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_LEFT){
                    canvas.drawLine(0, 0, 0, getHeight(), paint);
                }
            }
        }

        public Border[] getBorders() {
            return borders;
        }

        public void setBorders(Border[] borders) {
            this.borders = borders;
        }
}

그리고 경계 클래스:

public class Border {
    private int orientation;
    private int width;
    private int color = Color.BLACK;
    private int style;
    public int getWidth() {
        return width;
    }
    public void setWidth(int width) {
        this.width = width;
    }
    public int getColor() {
        return color;
    }
    public void setColor(int color) {
        this.color = color;
    }
    public int getStyle() {
        return style;
    }
    public void setStyle(int style) {
        this.style = style;
    }
    public int getOrientation() {
        return orientation;
    }
    public void setOrientation(int orientation) {
        this.orientation = orientation;
    }
    public Border(int Style) {
        this.style = Style;
    }
}

이것이 누군가에게 도움이 되기를 바랍니다 :)

제가 찾은 가장 간단한 솔루션(실제로 작동하는 솔루션):

<TextView
    ...
    android:background="@android:drawable/editbox_background" />

두 가지 방법으로 테두리를 설정할 수 있습니다.하나는 그릴 수 있고 두 번째는 프로그래밍 방식입니다.

그리기 가능 사용

<shape>
    <solid android:color="@color/txt_white"/>
    <stroke android:width="1dip" android:color="@color/border_gray"/>
    <corners android:bottomLeftRadius="10dp"
             android:bottomRightRadius="0dp"
             android:topLeftRadius="10dp"
             android:topRightRadius="0dp"/>
    <padding android:bottom="0dip"
             android:left="0dip"
             android:right="0dip"
             android:top="0dip"/>
</shape>

프로그램적


public static GradientDrawable backgroundWithoutBorder(int color) {

    GradientDrawable gdDefault = new GradientDrawable();
    gdDefault.setColor(color);
    gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                                           radius, radius });
    return gdDefault;
}

비슷한 답을 찾고 있었어요 뇌졸중과 다음 오버라이드로 할 수 있어요

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {

Paint strokePaint = new Paint();
strokePaint.setARGB(255, 0, 0, 0);
strokePaint.setTextAlign(Paint.Align.CENTER);
strokePaint.setTextSize(16);
strokePaint.setTypeface(Typeface.DEFAULT_BOLD);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(2);

Paint textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setTextSize(16);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);

canvas.drawText("Some Text", 100, 100, strokePaint);
canvas.drawText("Some Text", 100, 100, textPaint);

super.draw(canvas, mapView, shadow); 
}

재료 구성 요소 라이브러리를 사용하여 를 사용할 수 있습니다.

    <TextView
        android:id="@+id/textview"
        .../>

으로 그런다프수있적다습니를 할 수 .MaterialShapeDrawable:

    TextView textView = findViewById(R.id.textview);
    MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable();
    shapeDrawable.setFillColor(ContextCompat.getColorStateList(this,android.R.color.transparent));
    shapeDrawable.setStroke(1.0f, ContextCompat.getColor(this,R.color....));
    ViewCompat.setBackground(textView,shapeDrawable);

enter image description here

코드에 다음과 같은 것을 추가할 수 있습니다.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" >
    <solid android:color="#ffffff" />
    <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

텍스트 보기 주위에 테두리를 둘 수 있는 더 나은 방법을 찾았습니다.

배경에는 9개 패치 이미지를 사용합니다.SDK에는 9-patch 이미지를 만들 수 있는 도구가 포함되어 있으며 코딩은 전혀 필요하지 않습니다.

링크는 http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch 입니다.

둥근 모서리를 만들려면 아래 링크를 확인하십시오. http://androidcookbook.com/Recipe.seam?recipeId=2318

Android 프로젝트에서 그리기 가능한 폴더인 res는 비트맵(PNG 또는 JPG 파일)으로 제한되지 않지만 XML 파일에 정의된 모양을 저장할 수도 있습니다.

그런 다음 이러한 모양을 프로젝트에서 재사용할 수 있습니다.도형을 사용하여 레이아웃 주위에 테두리를 둘 수 있습니다.이 예에서는 곡선 모서리가 있는 직사각형 테두리를 보여 줍니다.그리기 가능한 폴더에 customborder.xml이라는 새 파일이 생성됩니다(이클립스에서 파일 메뉴를 사용하고 새로 만들기를 선택한 후 파일 이름에 그리기 가능한 폴더 유형을 선택하고 마침을 클릭).

테두리 모양을 정의하는 XML이 입력됩니다.

<?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners android:radius="20dp"/>
    <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp"/>
    <solid android:color="#CCCCCC"/>
</shape>

속성android:shape는 직사각형으로 설정됩니다(형상 파일은 타원, 선 및 링도 지원합니다).직사각형이 기본값이므로 정의 중인 직사각형인 경우 이 특성이 생략될 수 있습니다.모양 파일에 대한 자세한 내용은 http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape 에서 Android 모양 설명서를 참조하십시오.

요소 모서리는 직사각형 모서리를 반올림하도록 설정합니다.각 코너마다 다른 반경을 설정할 수 있습니다(Android 참조).

패딩 특성은 모양이 적용된 보기의 내용을 이동하여 내용이 테두리와 겹치지 않도록 하는 데 사용됩니다.

여기서 테두리 색은 밝은 회색(CCCCC 16진수 RGB 값)으로 설정됩니다.

도형은 그라데이션도 지원하지만 여기에서는 사용되지 않습니다.다시 Android 리소스에서 그라데이션을 정의하는 방법을 확인하십시오.모양은 다음을 사용하여 레이아웃에 적용됩니다.android:background="@drawable/customborder".

레이아웃 내에서 다른 보기를 일반적으로 추가할 수 있습니다.이 예에서는 단일 TextView가 추가되었으며 텍스트는 흰색(FFFFF 16진수 RGB)입니다.배경은 파란색으로 설정되어 있으며, 밝기를 줄이기 위해 약간의 투명도가 있습니다(A00000).FF 16진수 알파 RGB 값).마지막으로 레이아웃을 소량의 패딩이 있는 다른 레이아웃에 배치하여 화면 가장자리에서 오프셋합니다.따라서 전체 레이아웃 파일은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="5dp">
    <LinearLayout android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:background="@drawable/customborder">
        <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="Text View"
                android:textSize="20dp"
                android:textColor="#FFFFFF"
                android:gravity="center_horizontal"
                android:background="#A00000FF" />
    </LinearLayout>
</LinearLayout>

아주 간단하게 할 수 있는 방법이 있는데, 공유하고 싶습니다.

텍스트 뷰를 제곱하고 싶을 때는 선형 레이아웃에 배치합니다.선형 레이아웃의 배경색을 설정하고 텍스트 보기에 여백을 추가합니다.결과는 텍스트 보기를 제곱한 것과 동일합니다.

텍스트 보기에 대한 사용자 정의 배경을 만들 수 있습니다.스텝

  1. 프로젝트로 이동합니다.
  2. 리소스로 이동하고 마우스 오른쪽 버튼을 클릭하여 그릴 수 있습니다.
  3. 새로 만들기 -> 그리기 가능한 리소스 파일 클릭
  4. 파일 이름 지정
  5. 파일에 다음 코드 붙여넣기
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="1dp"
        android:color="@color/colorBlack" />
    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />
    <corners android:radius="6dp" />
    <solid android:color="#ffffffff" />
</shape>
  1. 배경으로 사용할 텍스트 보기의 경우,

    안드로이드:background="@drawable/your_fileName"

그리기 가능한 모양(모서리가 있는 직사각형)을 뷰의 배경으로 설정할 수 있습니다.

<TextView android:background="@drawable/frame"/>

그리고 직사각형 그리기 가능한 frame.xml(res/drawable 폴더에 저장):

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="@android:color/white" />
    <stroke android:width="1dip"
     android:color="#3d4caf"/>
    <corners android:radius="50dp"/>
</shape>

내 경우에는 작동하지 않기 때문에 콘스탄틴 부로프의 답변을 변경합니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <stroke android:width="2dip" android:color="#4fa5d5"/>
            <corners android:radius="7dp"/>
        </shape>
    </item>
</selector>

compileSdkVersion 26(Android 8.0), minSdkVersion 21(Android 5.0), targetSdkVersion 26, 구현 'com.android.지원:appcompat-v7:26.1.0', 눈금:4.1

테두리가 있는 ImageView를 반환하는 '단순' 도우미 클래스입니다.이것을 utils 폴더에 놓고 다음과 같이 불러주세요.

ImageView selectionBorder = BorderDrawer.generateBorderImageView(context, borderWidth, borderHeight, thickness, Color.Blue);

여기 코드가 있습니다.

/**
 * Because creating a border is Rocket Science in Android.
 */
public class BorderDrawer
{
    public static ImageView generateBorderImageView(Context context, int borderWidth, int borderHeight, int borderThickness, int color)
    {
        ImageView mask = new ImageView(context);

        // Create the square to serve as the mask
        Bitmap squareMask = Bitmap.createBitmap(borderWidth - (borderThickness*2), borderHeight - (borderThickness*2), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(squareMask);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, (float)borderWidth, (float)borderHeight, paint);

        // Create the darkness bitmap
        Bitmap solidColor = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(solidColor);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, borderWidth, borderHeight, paint);

        // Create the masked version of the darknessView
        Bitmap borderBitmap = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(borderBitmap);

        Paint clearPaint = new Paint();
        clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        canvas.drawBitmap(solidColor, 0, 0, null);
        canvas.drawBitmap(squareMask, borderThickness, borderThickness, clearPaint);

        clearPaint.setXfermode(null);

        ImageView borderView = new ImageView(context);
        borderView.setImageBitmap(borderBitmap);

        return borderView;
    }
}

텍스트 보기에 테두리를 추가하는 방법은 여러 가지가 있습니다.가장 간단한 방법은 사용자 지정 그리기 가능한 테이블을 만들고 다음과 같이 설정하는 것입니다.android:background="@drawable/textview_bg"텍스트 보기입니다.

다음과 이 될 수 .textview_bg.xml은 Drawables 파일의 파일입니다.당신은 가질 수 있습니다.solid 는또.gradient배경(또는 필요하지 않은 경우 없음),corners과 모서리 반지름을 합니다.stroke테두리를 추가합니다.

textview_bg.xml

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

        <corners
            android:radius="@dimen/dp_10"/>

        <gradient
            android:angle="225"
            android:endColor="#FFFFFF"
            android:startColor="#E0E0E0" />

        <stroke
            android:width="2dp"
            android:color="#000000"/>

    </shape>

도움이 될 수도 있습니다.

<RelativeLayout
    android:id="@+id/textbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@android:color/darker_gray" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_margin="3dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:text="@string/app_name"
        android:textSize="20dp" />

</RelativeLayout

배경색을 텍스트 보기의 크기와 테두리 색으로 사용하여 테두리 보기를 작성합니다.테두리 뷰 패딩을 테두리 너비로 설정합니다.텍스트 보기 배경색을 텍스트 보기에 사용할 색으로 설정합니다.이제 테두리 보기 내부에 텍스트 보기를 추가합니다.

사용해 보십시오.

<shape>
    <solid android:color="@color/txt_white"/>
    <stroke android:width="1dip" android:color="@color/border_black"/>
</shape>
  <View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="@android:color/black" />

이 코드는 당신이 원하는 곳에 배치할 수 있습니다.

xml 텍스트 보기에 배경을 설정합니다.

rounded_textview.xml 파일을 그리기 가능한 디렉토리에 추가합니다.

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="@android:color/white" />
   <stroke android:width="2dip" android:color="#4f5g52"/>
</shape>

그리기 가능한 파일을 텍스트로 설정합니다. 배경 보기.

사실, 그것은 매우 간단합니다.텍스트 보기 뒤에 단순한 검은색 사각형을 사용하려면 다음을 추가합니다.android:background="@android:color/black"TextView 태그 내에 있습니다.다음과 같이:

<TextView
    android:textSize="15pt" android:textColor="#ffa7ff04"
    android:layout_alignBottom="@+id/webView1"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:background="@android:color/black"/>

언급URL : https://stackoverflow.com/questions/3496269/how-to-put-a-border-around-an-android-textview

반응형