ฉันจะสร้างเส้นประ / ประใน Android ได้อย่างไร


254

ฉันพยายามทำเส้นประ ฉันกำลังใช้สิ่งนี้ในตอนนี้สำหรับเส้นทึบ:

LinearLayout divider = new LinearLayout( this );
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, 2 );
divider.setLayoutParams( params );
divider.setBackgroundColor( getResources().getColor( R.color.grey ) );

ฉันต้องการสิ่งนี้ แต่ประแทนที่จะเป็นของแข็ง ฉันต้องการหลีกเลี่ยงการสร้างเลย์เอาต์หลายร้อยสลับระหว่างเลย์เอาต์โปร่งใสและเลย์เอาต์ที่เป็นของแข็ง

คำตอบ:


515

ไม่มีรหัส java:

drawable / dotted.xml:

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

    <stroke
       android:color="#C7B299"
       android:dashWidth="10px"
       android:dashGap="10px"
       android:width="1dp"/>
</shape>

view.xml:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:src="@drawable/dotted"
    android:layerType="software" />

21
ฉันไม่เข้าใจว่าทำไมฉันถึงได้รับสายโดยไม่มีช่องว่างในโทรศัพท์ของฉันในขณะที่ฉันเห็นช่องว่างใน Graphical Layout ใน Eclipse
Dante

73
ไม่เป็นไรฉันได้พบวิธีแก้ปัญหาที่นี่: stackoverflow.com/questions/10843402/ เพียงแค่ตั้งประเภทเลเยอร์เป็นซอฟต์แวร์: android: layerType = "ซอฟต์แวร์"
Dante

7
มีเป็นข้อผิดพลาดที่รู้จักกันcanvas.drawLine()เมื่อใช้ เพื่อปิดการใช้งานการเร่งด้วยฮาร์ดแวร์คุณสามารถใช้canvas.drawPathแทน
hgoebl

10
ใช้แทนdp px
S.M_Emamian

7
ตรวจสอบว่าใช้งานได้กับทั้ง Android 6.0.1 และ 4.4.4 สองสิ่งที่ควรทราบ: 1) คุณจำเป็นต้องมี ImageView, มุมมองที่มี drawable เป็นพื้นหลังไม่ได้ทำ 2) android:layerType="software"ต้องตั้งไว้ที่ ImageView
Jonik

206

ผลของเส้นทางถูกตั้งค่าบนวัตถุสี

Paint fgPaintSel = new Paint();
fgPaintSel.setARGB(255, 0, 0,0);
fgPaintSel.setStyle(Style.STROKE);
fgPaintSel.setPathEffect(new DashPathEffect(new float[] {10,20}, 0));

คุณสามารถสร้างรูปแบบจุดประได้ทุกประเภทโดยการใส่ตัวเลขในอาร์เรย์ int [] ซึ่งระบุอัตราส่วนของเส้นประและช่องว่าง นี่คือเส้นที่เรียบง่าย


ทำไมตอนนี้ถึงทำเพื่อฉัน stackoverflow.com/questions/12401311/…
Chris.Zou

ลองใช้ float ใหม่ [] {5,10,15,20} ใน Constructor
siliconeagle

4
ฉันใหม่เล็กน้อยในการพัฒนา Android ฉันต้องการถามว่าวัตถุสีที่มีเอฟเฟกต์เส้นประที่เพิ่มเข้ากับเค้าโครงเชิงเส้นที่ฉันเพิ่งสร้างขึ้นได้อย่างไร
DirkJan

ฉันคัดลอกและวางรหัสนี้โดยตรง แต่ไม่มีอะไรเกิดขึ้น ฉันควรเขียนโค้ดพิเศษเพื่อให้มันทำงานได้หรือไม่
สัน

50

การสร้างเส้นประโดยใช้ XML
สร้าง xml ในโฟลเดอร์ drawable และกำหนดพื้นหลังให้กับรายการที่คุณต้องการตั้งค่าเส้นประประ

การสร้างพื้นหลัง XML "dashed_border":

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="#ffffff" />
            <stroke
                android:dashGap="5dp"
                android:dashWidth="5dp"
                android:width="1dp"
                android:color="#0000FF" />
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
        </shape>
    </item>
</layer-list>

การเพิ่มพื้นหลังให้กับรายการ:

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/dashed_border"/>

หากคุณต้องการรัศมีสำหรับมุมเพียงเพิ่ม<corners android:radius="5dp" />รูปร่างของคุณ ดูstackoverflow.com/a/41940609/1000551สำหรับข้อมูลเพิ่มเติม
Vadim Kotov

ฉันคิดว่ารายการเลเยอร์ไม่จำเป็นสำหรับรายการเดียว ฉันใช้ <shape> เป็นองค์ประกอบรูทและใช้งานได้เหมือนกัน
big_m

37

สร้าง xml (view_line_dotted.xml):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:bottom="-1dp"
            android:left="-1dp"
            android:right="-1dp"
            android:top="0dp">

            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#ffff0017"
                    android:dashGap="3dp"
                    android:dashWidth="1dp" />

                <solid android:color="@android:color/transparent" />

                <padding
                    android:bottom="10dp"
                    android:left="10dp"
                    android:right="10dp"
                    android:top="10dp" />
            </shape>
        </item>
</layer-list>

ตั้งเป็นพื้นหลังของมุมมองของคุณ:

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@drawable/view_line_dotted" />

คุณช่วยอธิบายได้มั้ย
skywall

1
ขอบคุณเบาะแสคือ<item android:bottom="-1dp" android:left="-1dp" android:right="-1dp" >ถ้าคุณต้องการความหนา 1dp ของเส้นแนวนอน
CoolMind

น่ากลัว เกือบทำงานออกจากกล่องสำหรับฉัน สิ่งเดียวที่ฉันต้องการคือเปลี่ยนแท็กสโตรก ความกว้าง 2dp และ dashdap 4dp
Sufian

สำหรับอุปกรณ์ที่มี API <21 ให้เพิ่มandroid:layerType="software"เข้าไปในมุมมองหรือเขียนview.setLayerType(View.LAYER_TYPE_SOFTWARE, null)(ดูstackoverflow.com/questions/10843402/… )
CoolMind

24

สิ่งที่ฉันทำเมื่อฉันต้องการวาดเส้นประคือการกำหนดdash_line.xml ที่วาดได้:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" >
<stroke
    android:dashGap="3dp"
    android:dashWidth="2dp"
    android:width="1dp"
    android:color="@color/black" />
</shape>

และจากนั้นในรูปแบบเพียงแค่กำหนดมุมมองที่มีพื้นหลังเป็นdash_line หมายเหตุเพื่อรวมandroid: layerType = "software"มิฉะนั้นจะไม่สามารถใช้งานได้

<View
            android:layout_width="match_parent"
            android:layout_height="5dp"
            android:background="@drawable/dash_line"
            android:layerType="software" />

ขอบคุณเพื่อน! นี่android:layerType="software"คือสิ่งที่ฉันกำลังมองหา! ไชโย!
Toochka

20

ฉันมีเส้นประที่กำหนดเองซึ่งสนับสนุนเส้นประแนวนอนและแนว verical รหัสด้านล่าง:

public class DashedLineView extends View
{
private float density;
private Paint paint;
private Path path;
private PathEffect effects;

public DashedLineView(Context context)
{
    super(context);
    init(context);
}

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

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

private void init(Context context)
{
    density = DisplayUtil.getDisplayDensity(context);
    paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(density * 4);
    //set your own color
    paint.setColor(context.getResources().getColor(R.color.XXX));
    path = new Path();
    //array is ON and OFF distances in px (4px line then 2px space)
    effects = new DashPathEffect(new float[] { 4, 2, 4, 2 }, 0);

}

@Override
protected void onDraw(Canvas canvas)
{
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    paint.setPathEffect(effects);
    int measuredHeight = getMeasuredHeight();
    int measuredWidth = getMeasuredWidth();
    if (measuredHeight <= measuredWidth)
    {
        // horizontal
        path.moveTo(0, 0);
        path.lineTo(measuredWidth, 0);
        canvas.drawPath(path, paint);
    }
    else
    {
        // vertical
        path.moveTo(0, 0);
        path.lineTo(0, measuredHeight);
        canvas.drawPath(path, paint);
    }

}
}

วิธีนี้เป็นที่นิยมมากกว่ารูปร่าง xml หรือไม่
IgorGanapolsky

ที่สมบูรณ์แบบ! สิ่งที่ฉันกำลังมองหา
งาน M

9

โดยใช้คลาสนี้คุณสามารถใช้เอฟเฟกต์ "ขีดกลางและขีดเส้นใต้" กับข้อความหลายบรรทัด เพื่อใช้ DashPathEffect คุณต้องปิด hardwareAccelerated TextView ของคุณ (แต่วิธี DashPathEffect มีปัญหากับข้อความยาว) คุณสามารถหาตัวอย่างโครงการของฉันที่นี่: https://github.com/jintoga/Dashed-Underlined-TextView/blob/master/Untitled.png

public class DashedUnderlineSpan implements LineBackgroundSpan, LineHeightSpan {

    private Paint paint;
    private TextView textView;
    private float offsetY;
    private float spacingExtra;

    public DashedUnderlineSpan(TextView textView, int color, float thickness, float dashPath,
                               float offsetY, float spacingExtra) {
        this.paint = new Paint();
        this.paint.setColor(color);
        this.paint.setStyle(Paint.Style.STROKE);
        this.paint.setPathEffect(new DashPathEffect(new float[] { dashPath, dashPath }, 0));
        this.paint.setStrokeWidth(thickness);
        this.textView = textView;
        this.offsetY = offsetY;
        this.spacingExtra = spacingExtra;
    }

    @Override
    public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v,
                             Paint.FontMetricsInt fm) {
        fm.ascent -= spacingExtra;
        fm.top -= spacingExtra;
        fm.descent += spacingExtra;
        fm.bottom += spacingExtra;
    }

    @Override
    public void drawBackground(Canvas canvas, Paint p, int left, int right, int top, int baseline,
                               int bottom, CharSequence text, int start, int end, int lnum) {
        int lineNum = textView.getLineCount();
        for (int i = 0; i < lineNum; i++) {
            Layout layout = textView.getLayout();
            canvas.drawLine(layout.getLineLeft(i), layout.getLineBottom(i) - spacingExtra + offsetY,
                    layout.getLineRight(i), layout.getLineBottom(i) - spacingExtra + offsetY,
                    this.paint);
        }
    }
}

ผลลัพธ์:

ขีดเส้นใต้ประ


8

หากคุณกำลังมองหาเส้นแนวตั้งใช้ drawable นี้

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-8dp"
        android:bottom="-8dp"
        android:left="-8dp">
        <shape>
            <solid android:color="@android:color/transparent"/>
            <stroke
                android:width="4dp"
                android:color="#ffffff"
                android:dashGap="4dp"
                android:dashWidth="4dp"/>
        </shape>
    </item>
</layer-list>

ค่าลบด้านล่างและซ้ายด้านบนลบด้านที่ไม่ต้องการของรูปร่างออกจากเส้นประหนึ่งเส้น

ใช้ในมุมมองเช่นนั้น

<View
android:layout_width="4dp"
android:layout_height="match_parent"
android:background="@drawable/dash_line_vertical"
android:layerType="software" />

4

ฉันได้ใช้ด้านล่างเป็นพื้นหลังสำหรับเค้าโครง:

<?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:dashWidth="10px"
   android:dashGap="10px"
    android:color="android:@color/black" 
   />
</shape>

ทำไมandroid:shape="rectangle"แทนที่จะเป็นบรรทัด?
IgorGanapolsky

4

ฉันสร้างเส้นประประสำหรับ EditText ไปเลย สร้าง xml ใหม่ของคุณ เช่นรหัส dashed_border.xml ที่นี่:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:bottom="1dp"
    android:left="-2dp"
    android:right="-2dp"
    android:top="-2dp">
    <shape android:shape="rectangle">
        <stroke
            android:width="2dp"
            android:color="#000000"
            android:dashGap="3dp"
            android:dashWidth="1dp" />

        <solid android:color="#00FFFFFF" />

        <padding
            android:bottom="10dp"
            android:left="10dp"
            android:right="10dp"
            android:top="10dp" />
    </shape>
</item></layer-list>

และใช้ไฟล์ xml ใหม่ใน EditText ของคุณเช่น:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/dashed_border"/>

ไชโย! :)



3

ทางออกที่ดีที่สุดสำหรับพื้นหลังประทำงานสมบูรณ์แบบ

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
  <stroke
    android:dashGap="3dp"
    android:dashWidth="2dp"
    android:width="1dp"
    android:color="@color/colorBlack" />
</shape>

3

สำหรับเอฟเฟ็กต์จุดบนผืนผ้าใบให้ตั้งค่าคุณลักษณะนี้เป็นวัตถุสี:

paint.setPathEffect(new DashPathEffect(new float[] {0,30}, 0));

และเปลี่ยนค่า 30 ตามที่เรนเดอร์ของคุณเหมาะสมกับคุณ: มันแสดงถึง "ระยะทาง" ระหว่างแต่ละจุด

ป้อนคำอธิบายรูปภาพที่นี่


2

สิ่งเดียวที่ใช้ได้ผลสำหรับฉันและฉันคิดว่าวิธีที่ง่ายที่สุดคือการใช้ Path กับวัตถุสีเช่นนี้

    Paint paintDash = new Paint();
    paintDash.setARGB(255, 0, 0, 0);
    paintDash.setStyle(Paint.Style.STROKE);
    paintDash.setPathEffect(new DashPathEffect(new float[]{10f,10f}, 0));
    paintDash.setStrokeWidth(2);
    Path pathDashLine = new Path();

จากนั้น onDraw (): (รีเซ็ตการโทรที่สำคัญหากคุณเปลี่ยนจุดเหล่านั้นระหว่างการโทรแบบถอนสายทำให้ Path บันทึกการเคลื่อนไหวทั้งหมด)

    pathDashLine.reset();
    pathDashLine.moveTo(porigenX, porigenY);
    pathDashLine.lineTo(cursorX,cursorY);
    c.drawPath(pathDashLine, paintDash);

2

ฉันชอบโซลูชันจากRuidgeแต่ฉันต้องการการควบคุมเพิ่มเติมจาก XML ดังนั้นฉันจึงเปลี่ยนเป็น Kotlin และเพิ่มคุณสมบัติ

1) คัดลอกคลาส Kotlin:

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View

class DashedDividerView : View {
constructor(context: Context) : this(context, null, 0)
constructor(context: Context, attributeSet: AttributeSet) : this(context, attributeSet, 0)

companion object {
    const val DIRECTION_VERTICAL = 0
    const val DIRECTION_HORIZONTAL = 1
}

private var dGap = 5.25f
private var dWidth = 5.25f
private var dColor = Color.parseColor("#EE0606")
private var direction = DIRECTION_HORIZONTAL
private val paint = Paint()
private val path = Path()

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
    context,
    attrs,
    defStyleAttr
) {
    val typedArray = context.obtainStyledAttributes(
        attrs,
        R.styleable.DashedDividerView,
        defStyleAttr,
        R.style.DashedDividerDefault
    )

    dGap = typedArray.getDimension(R.styleable.DashedDividerView_dividerDashGap, dGap)
    dWidth = typedArray.getDimension(R.styleable.DashedDividerView_dividerDashWidth, dWidth)
    dColor = typedArray.getColor(R.styleable.DashedDividerView_dividerDashColor, dColor)
    direction =
        typedArray.getInt(R.styleable.DashedDividerView_dividerDirection, DIRECTION_HORIZONTAL)

    paint.color = dColor
    paint.style = Paint.Style.STROKE
    paint.pathEffect = DashPathEffect(floatArrayOf(dWidth, dGap), 0f)
    paint.strokeWidth = dWidth

    typedArray.recycle()
}

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    path.moveTo(0f, 0f)

    if (direction == DIRECTION_HORIZONTAL) {
        path.lineTo(measuredWidth.toFloat(), 0f)
    } else {
        path.lineTo(0f, measuredHeight.toFloat())
    }
    canvas.drawPath(path, paint)
}

}

2) สร้างไฟล์attrในไดเรกทอรี/ resและเพิ่มนี้

 <declare-styleable name="DashedDividerView">
    <attr name="dividerDashGap" format="dimension" />
    <attr name="dividerDashWidth" format="dimension" />
    <attr name="dividerDashColor" format="reference|color" />
    <attr name="dividerDirection" format="enum">
        <enum name="vertical" value="0" />
        <enum name="horizontal" value="1" />
    </attr>
</declare-styleable>

3) เพิ่มสไตล์ให้กับไฟล์สไตล์

 <style name="DashedDividerDefault">
    <item name="dividerDashGap">2dp</item>
    <item name="dividerDashWidth">2dp</item>
    <!-- or any color -->
    <item name="dividerDashColor">#EE0606</item>
    <item name="dividerDirection">horizontal</item>
</style>

4) ตอนนี้คุณสามารถใช้สไตล์เริ่มต้น

<!-- here will be your path to the class -->
<com.your.package.app.DashedDividerView
    android:layout_width="match_parent"
    android:layout_height="2dp"
    />

หรือตั้งค่าคุณสมบัติใน XML

<com.your.package.app.DashedDividerView
    android:layout_width="match_parent"
    android:layout_height="2dp"
    app:dividerDirection="horizontal"
    app:dividerDashGap="2dp"
    app:dividerDashWidth="2dp"
    app:dividerDashColor="@color/light_gray"/>

2

คำตอบเหล่านี้ไม่เหมาะกับฉัน คำตอบส่วนใหญ่เหล่านี้จะทำให้คุณมีความโปร่งใสครึ่งหนึ่ง เพื่อหลีกเลี่ยงปัญหานี้คุณต้องห่อภาชนะของคุณอีกครั้งด้วยภาชนะอื่นที่มีสีที่คุณต้องการ นี่คือตัวอย่าง:

นี่คือลักษณะที่ปรากฏ

dashed_border_layout.xml

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/black"
android:background="@drawable/dashed_border_out">
<LinearLayout
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:padding="5dp"
    android:background="@drawable/dashed_border_in"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is&#10;Dashed Container"
        android:textSize="16sp" />
</LinearLayout>

dashed_border_in.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape>
        <corners android:radius="10dp" />
        <solid android:color="#ffffff" />
        <stroke
            android:dashGap="5dp"
            android:dashWidth="5dp"
            android:width="3dp"
            android:color="#0000FF" />
        <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
    </shape>
</item>

dashed_border_out.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape>
        <corners android:radius="12dp" />
    </shape>
</item>


1

ฉันไม่รู้ว่าทำไม แต่คำตอบที่โหวตไม่ได้สำหรับฉัน ฉันเขียนมันด้วยวิธีนี้และทำงานได้ดี
กำหนดมุมมองที่กำหนดเอง:

public class XDashedLineView extends View {

private Paint   mPaint;
private Path    mPath;
private int     vWidth;
private int     vHeight;

public XDashedLineView(Context context) {
    super(context);
    init();
}

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

public XDashedLineView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init() {
    mPaint = new Paint();
    mPaint.setColor(Color.parseColor("#3F577C"));
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setPathEffect(new DashPathEffect(new float[] {10,10}, 0));
    mPath = new Path();
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    this.vWidth = getMeasuredWidth();
    this.vHeight = getMeasuredHeight();
    mPath.moveTo(0, this.vHeight / 2);
    mPath.quadTo(this.vWidth / 2, this.vHeight / 2, this.vWidth, this.vHeight / 2);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawPath(mPath, mPaint);
}
}

จากนั้นคุณสามารถใช้มันใน xml ของคุณ:

        <com.YOUR_PACKAGE_NAME.XDashedLineView
        android:layout_width="690dp"
        android:layout_height="1dp"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="620dp"/>

1

ฉันได้สร้างห้องสมุดพร้อมมุมมองที่กำหนดเองเพื่อแก้ไขปัญหานี้และควรใช้งานง่ายมาก ดูhttps://github.com/Comcast/DahDitสำหรับข้อมูลเพิ่มเติม คุณสามารถเพิ่มเส้นประได้ดังนี้:

<com.xfinity.dahdit.DashedLine
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    app:dashHeight="4dp"
    app:dashLength="8dp"
    app:minimumDashGap="3dp"
    app:layout_constraintRight_toRightOf="parent"
    android:id="@+id/horizontal_dashes"/>

ขอบคุณสำหรับการแบ่งปัน. ฉันจะต้องปรับแต่งสำหรับกรณีการใช้งานของฉัน แต่นี่คือสิ่งที่ฉันต้องการในการเริ่มต้นด้วยมุมมองที่กำหนดเอง ไชโย

0

คล้ายกับ tier777ที่นี่เป็นวิธีแก้ปัญหาสำหรับเส้นแนวนอน:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-1dp">
        <shape android:shape="line">
            <stroke
                android:width="1dp"
                android:color="#111"
                android:dashWidth="8dp"
                android:dashGap="2dp"
                />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

<item android:top="-1dp">เบาะแสเป็น

ในการแสดงเส้นประบนอุปกรณ์เก่า (<= API 21) คุณควรสร้างมุมมองด้วยandroid:layerType="software"(ดูข้อบกพร่องที่เป็นไปได้ของ Android ที่ขีดเส้นประที่สามารถวาดได้ใน Android ):

<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@drawable/dashed_line"
    android:layerType="software"
    />

นอกจากนี้คุณสามารถเพิ่มมุมมองเดียวกันโดยไม่ต้องandroid:layerType="software"เพื่อlayout-v23ประสิทธิภาพที่ดีขึ้น แต่ฉันไม่แน่ใจว่ามันจะทำงานบนอุปกรณ์ทั้งหมดที่มี API 23

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.