سؤال

أحاول معرفة كيفية تحديد خط عمودي (سمك 1 دبوة في الثانية) لاستخدامه كقابلة للسحب.

لجعل واحدة أفقية ، إنه واضح ومباشر:

<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>

والسؤال هو ، كيف تجعل هذا الخط عمودي؟

نعم ، هناك حلول ، مثل رسم شكل مستطيل بسمك 1 بكسل ، ولكن هذا يعقد XML القابل للرسمية ، إذا كان يتكون من متعددة <item> عناصر.

أي شخص لديه أي فرصة مع هذا؟

تحديث

القضية لا تزال دون حل. ومع ذلك ، بالنسبة لأي شخص على حملة صليبية وثائق Android - قد تجد هذا مفيدًا:دليل Android XML المفقود

تحديث

لم أجد أي طريقة أخرى غير طريقة وضع علامة عليها بشكل صحيح. إنها تشعر بالخدعة على الرغم من أنها "ثقيلة" بعض الشيء ، وبالتالي إذا كنت تعرف أن الإجابة لا تنسى المشاركة ؛)

هل كانت مفيدة؟

المحلول

بدلاً من الشكل ، يمكنك تجربة ملف View:

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

لقد استخدمت هذا فقط للخطوط الأفقية ، لكنني أعتقد أنه سيعمل مع خطوط عمودية أيضًا.

يستخدم:

<View
    android:layout_width="fill_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>

ومع ذلك ، فإن المشكلة الوحيدة هي أن معلمات التخطيط المحددة في تخطيطك هي الأبعاد المستخدمة لرسم الشكل الأصلي. بمعنى أنه إذا كنت تريد أن يكون خطك يبلغ طوله 30 د في الثانية ، فأنت بحاجة إلى تحديد layout_width من 30 د في وضعك في تخطيط XML. لكن العرض النهائي سيكون أيضًا 30 د في هذه الحالة ، وهو أمر غير مرغوب فيه على الأرجح بالنسبة لمعظم المواقف. هذا يعني في الأساس كل من العرض والارتفاع يجب أن يكونا نفس القيمة ، وقيمة الطول المطلوب للخط. لم أستطع معرفة كيفية إصلاح هذا.

يبدو أن هذا هو الحل "Android Way" ، ولكن ما لم يكن هناك بعض الإصلاحات أو الحل لمشكلة الأبعاد التي أذكرها ، فمن المحتمل أن هذا لن يعمل لمعظم الناس. ما نحتاجه حقًا هو سمة اتجاه فيu003Cshape/> أوu003Cstroke/> .

يمكنك أيضًا محاولة الرجوع إلى سمات أخرى قابلة للسحب في سمات العلامة الدورية ، مثل:

<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" />
<?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

يمكنك استخدام سمة الدوران

 <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"?>
<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>

أعتقد أن هذا هو أبسط الحلول:

<?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>

كنت بحاجة إلى إضافة وجهات نظراتي ديناميكيًا/برمجيًا ، لذا فإن إضافة رؤية إضافية كان من المفترض أن تكون مرهقة. كان ارتفاع عرضي wrap_content ، لذلك لم أستطع استخدام محلول المستطيل. لقد وجدت مدونة هنا حول تمديد TextView ، والتجاوز Ondraw () والطلاء في الخط ، لذلك قمت بتطبيق ذلك وهو يعمل بشكل جيد. انظر الكود الخاص بي أدناه:

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>
        <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>

سيؤدي هذا المثال إلى إنشاء خط أسود رفيع 1PP على الجانب الأيمن من العرض ، وسيكون هذا يمكن رسمه كخلفية.

يمكنك استخدام شكل ولكن بدلاً من الخط ، اجعله مستطيلًا.

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>

    ..........
    .......
    ......
<?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>

لصنع خط عمودي ، ما عليك سوى استخدام مستطيل بعرض 1 دبوة:

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

لا تستخدم stroke, ، استعمال solid (وهو لون "ملء") لتحديد لون الخط.

يبدو أنه لم يذكر أحد هذا الخيار:

<?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>
 <View
        android:layout_width="2dp"
        android:layout_height="40dp"

        android:background="#ffffff"
        android:padding="10dp" />`
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top