programing

XML 그리기 가능을 사용한 수직선

skycolor 2023. 8. 5. 10:02
반응형

XML 그리기 가능을 사용한 수직선

도면으로 사용할 수직선(1dp 두께)을 정의하는 방법을 찾고 있습니다.

수평적인 것을 만드는 것은 매우 간단합니다.

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
    <stroke android:width="1dp" android:color="#0000FF"/>
    <size android:height="50dp" />     
</shape>

문제는, 어떻게 이 선을 수직으로 만들 것인가 하는 것입니다.

모양을 두께로 방법이 개의 예, 직 1px 두로 된 경우 한 XML을 만듭니다.<item>요소들.

누가 이런 일을 할 기회가 있었나요?

갱신하다

사건은 아직 미해결입니다.그러나 Android 설명서 십자군에 참여하는 모든 사용자에게 유용할 수 있습니다: Missing Android XML Manual

갱신하다

저는 제가 정확하다고 표시한 것 외에 다른 방법을 찾지 못했습니다.약간 "무거운" 느낌이 들지만 요령을 발휘하므로, 혹시 답을 알고 있다면 공유하는 것을 잊지 마십시오;)

모양 대신에, 당신은 시도할 수 있습니다.View:

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="#FF0000FF" />

저는 이것을 가로줄에만 사용해봤지만 세로줄에도 사용할 수 있을 것 같습니다.

사용:

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#FF0000FF" />

가로줄용으로

회전 태그 내부에 모양을 중첩할 수 있습니다.

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90">
    <shape 
        android:shape="line">
        <stroke
            android:width="1dp"
            android:color="#ff00ff"
            android:dashWidth="1dp"
            android:dashGap="2dp" />
    </shape>
</rotate>

그러나 유일한 문제는 레이아웃 xml에 정의된 레이아웃 매개변수가 원래 모양을 그리는 데 사용되는 치수라는 것입니다.즉, 줄의 높이를 30dp로 하려면 레이아웃 xml에 layout_width를 30dp로 정의해야 합니다.그러나 이 경우 최종 폭도 30dp가 될 것이며, 이는 대부분의 상황에서 바람직하지 않을 수 있습니다.즉, 너비와 높이가 모두 동일한 값, 즉 선에 대해 원하는 길이의 값이어야 합니다.저는 이것을 고치는 방법을 찾을 수가 없었어요.

이것이 "안드로이드 방식" 해결책인 것처럼 보이지만, 제가 언급한 치수 문제에 대해 약간의 수정이나 해결책이 없는 한 대부분의 사람들에게 이것은 작동하지 않을 것입니다.우리에게 정말 필요한 것은 <shape/> 또는 <stroke/>의 방향 속성입니다.

회전 태그의 속성에서 다음과 같은 다른 그리기 대상을 참조할 수도 있습니다.

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90"
    android:drawable="@drawable/horizontal_line" />

하지만 저는 이것을 테스트하지 않았고 같은 문제가 있을 것으로 예상합니다.

편집 --

아, 사실 해결책을 찾았어요.레이아웃 xml에서 마이너스 여백을 사용하여 불필요한 추가 공간을 제거할 수 있습니다.예:

<ImageView
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_marginLeft="-15dp"
    android:layout_marginRight="-15dp"
    android:src="@drawable/dashed_vertical_line" />

회전 특성을 사용할 수 있습니다.

 <item>
    <rotate
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%" >
        <shape
            android:shape="line"
            android:top="1dip" >
            <stroke
                android:width="1dip"
                 />
        </shape>
    </rotate>
</item>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle" >
    <stroke android:width="1dp" android:color="@color/white" />
    <size android:width="2dp" />
</shape>

작업은 저에게 적합합니다. fill_parent 또는 dp 높이로 고정된 크기로 배경을 지정합니다.

이것이 가장 간단한 해결책이라고 생각합니다.

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

    <item
        android:gravity="center">
        <shape android:shape="rectangle">
            <size android:width="1dp" />
            <solid android:color="#0000FF" />
        </shape>
    </item>

</layer-list>

저는 다른 해결책을 생각해냈습니다.먼저 그리기 가능한 영역을 원하는 색상으로 채우고 왼쪽 또는 오른쪽 패딩을 사용하면서 배경색으로 전체 영역을 다시 채우는 것이 아이디어입니다.분명히 이것은 그리기 가능한 그림의 맨 왼쪽 또는 오른쪽에 있는 수직선에만 적용됩니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/divider_color" />
    <item android:left="6dp" android:drawable="@color/background_color" />
</layer-list>

보기를 동적으로/프로그램적으로 추가해야 했기 때문에 보기를 추가하는 것이 번거로웠을 것입니다.제 뷰 높이가 WRAP_CONTENT여서 직사각형 솔루션을 사용할 수 없었습니다.저는 여기에서 TextView 확장, Draw() 위에 덮어쓰기, 라인에 그림 그리기에 대한 블로그 포스트를 발견했습니다. 그래서 저는 그것을 구현했고 그것은 잘 작동합니다.아래 내 코드 참조:

public class NoteTextView extends TextView {
    public NoteTextView(Context context) {
       super(context);
    }
    private Paint paint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.parseColor("#F00000FF"));
        paint.setStrokeWidth(0);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawLine(0, 0, 0, getHeight(), paint);
    }
}

왼쪽에 수직선이 필요했는데 도면 매개변수는drawLine(startX, startY, stopX, stopY, paint)따라서 뷰를 가로지르는 모든 방향으로 직선을 그릴 수 있습니다.그리고 내 활동에서 나는.NoteTextView note = new NoteTextView(this);이게 도움이 되길 바랍니다.

아주 단순한...Android xml에서 세로줄을 추가하려면...

<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:rotation="90"
android:background="@android:color/darker_gray"/>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="-3dp"
        android:left="-3dp"
        android:top="-3dp">

        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
            <stroke
                android:width="2dp"
                android:color="#1fc78c" />
        </shape>

    </item>

</layer-list>

@Commons @ @일만지이▁@만comm.예를 Ware의 수 없습니다.layer-list그기쉬운같다은경우음과리를 결합한 <rotate>그리고.<shape>크기에 문제를 일으킵니다.Android Vector Drawable은 Android Vector Drawable입니다.. (1x10dp를 할 수 .)width,height그리고.strokeColor속성):

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="1"
    android:viewportHeight="10"
    android:width="1dp"
    android:height="10dp">

    <path
        android:strokeColor="#FFFFFF"
        android:strokeWidth="1"
        android:pathData="M0.5,0 V10" />

</vector> 

수직선을 사용할 위치에 따라 다르지만, 예를 들어 수직 테두리를 원하는 경우 부모 뷰에 배경을 사용자 정의 그리기 가능하게 할 수 있습니다.그런 다음 다음 다음과 같이 그리기 가능한 항목을 정의할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape
            android:shape="rectangle">
            <stroke android:width="1dp" android:color="#000000" />
            <solid android:color="#00ffffff" />

        </shape>
    </item>

    <item android:right="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#00ffffff" />
        </shape>
    </item>

</layer-list>

이 예에서는 뷰 오른쪽에 1dp 얇은 검은색 선을 작성하고 이 선을 배경으로 그릴 수 있습니다.

아무도 이 옵션을 언급하지 않은 것 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/white" android:width="1dp"/>
</layer-list>

도형을 사용할 수 있지만 선 대신 직사각형으로 만들 수 있습니다.

android:shape="rectangle">
<stroke
    android:width="5dp"
    android:color="#ff000000"
    android:dashGap="10px"
    android:dashWidth="30px" />

그리고 당신의 레이아웃에 이것을 사용하세요...

<ImageView
    android:layout_width="7dp"
    android:layout_height="match_parent"
    android:src="@drawable/dashline"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layerType="software"/>

대시의 크기에 따라 너비를 사용하여 한 줄로 묶어야 할 수도 있습니다.

이것이 치어스에 도움이 되길 바랍니다.

add this in your styles.xml

        <style name="Divider">
            <item name="android:layout_width">1dip</item>
            <item name="android:layout_height">match_parent</item>
            <item name="android:background">@color/divider_color</item>
        </style>

        <style name="Divider_invisible">
            <item name="android:layout_width">1dip</item>
            <item name="android:layout_height">match_parent</item>
        </style>

then wrap this style in a linear layout where you want the vertical line, I used the vertical line as a column divider in my table. 

     <TableLayout
                android:id="@+id/table"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:stretchColumns="*" >

                <TableRow
                    android:id="@+id/tableRow1"
                    android:layout_width="fill_parent"
                    android:layout_height="match_parent"
                    android:background="#92C94A" >

                    <TextView
                        android:id="@+id/textView11"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp" />
    //...................................................................    

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider_invisible" />
                    </LinearLayout>
        //...................................................................
                    <TextView
                        android:id="@+id/textView12"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/main_wo_colon"
                        android:textColor="@color/white"
                        android:textSize="16sp" />
  //...............................................................  
                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

    //...................................................................
                    <TextView
                        android:id="@+id/textView13"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/side_wo_colon"
                        android:textColor="@color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

                    <TextView
                        android:id="@+id/textView14"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/total"
                        android:textColor="@color/white"
                        android:textSize="16sp" />
                </TableRow>

                <!-- display this button in 3rd column via layout_column(zero based) -->

                <TableRow
                    android:id="@+id/tableRow2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#6F9C33" >

                    <TextView
                        android:id="@+id/textView21"
                        android:padding="5dp"
                        android:text="@string/servings"
                        android:textColor="@color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

    ..........
    .......
    ......

수직선을 만들려면 너비가 1dp인 직사각형을 사용합니다.

<shape>
    <size
        android:width="1dp"
        android:height="16dp" />
    <solid
        android:color="#c8cdd2" />
</shape>

사용하지 stroke,사용하다solid("채우기" 색상)를 선택하여 선의 색상을 지정합니다.

저는 가로선과 세로선에 이 그림을 사용합니다.

https://gist.github.com/UtkuGlsvn/410ffb867bef3d89e85bf6bbd57950c1

예 xml:

<ImageView
        android:id="@+id/imageView9"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="15dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="15dp"
        android:src="@drawable/vertical_line"
        app:layout_constraintEnd_toEndOf="@+id/imageView7"
        app:layout_constraintStart_toStartOf="@+id/imageView7"
        app:layout_constraintTop_toBottomOf="@+id/imageView8" />
 <View
        android:layout_width="2dp"
        android:layout_height="40dp"

        android:background="#ffffff"
        android:padding="10dp" />`

언급URL : https://stackoverflow.com/questions/2658772/vertical-line-using-xml-drawable

반응형