Deron
Deron

Reputation: 352

How to make horizontal line in Android programmatically

I am trying to fill linear layout programmatically like this

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,      
            LayoutParams.WRAP_CONTENT
    );
    params.setMargins(dpToPx(6), 0, 0, 0);
    kac.setLayoutParams(params);
    LinearLay.addView(kac);

and I want to add (after every TextView (like kac)) a horizontal line like this one I have in my xml

 <View
            android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:background="#B3B3B3" 
             android:padding="10dp"
            />

Upvotes: 14

Views: 22772

Answers (4)

balysv
balysv

Reputation: 176

I recommend creating a drawable containing the line and setting it as a background to your textview. You would avoid unnecessary views.

Sample drawable could be:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#LINE_COLOR"/>
            <padding
                android:bottom="1dp"
                />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#BACKGROUND_COLOR"/>
        </shape>
    </item>
</layer-list>

And you can set it by

textView.setBackgroundResource(R.drawable.resource)

Upvotes: 3

Andrew Matiuk
Andrew Matiuk

Reputation: 922

you just need to set style (background) to your TextViews, making Views to in this case is a waste

Upvotes: 0

trippedout
trippedout

Reputation: 1571

edit* example:

@Override
protected void onDraw(Canvas canvas) 
{
    //this would draw the textview normally
    super.onDraw(canvas);

    //this would add the line that you wanted to add at the bottom of your view
    //but you would want to create your rect and paint outside of the draw call
    //after onmeasure/onlayout is called so you have proper dimensions
    canvas.drawRect(new Rect(0, this.getHeight()-1, this.getWidth(),  this.getHeight()), mPaint);
}

if i understand that you are just looking to draw a line after every textview, your best bet is probably to just extend TextView with a custom class, overriding the onDraw method, adding a paint call to draw the line yourself

Upvotes: 1

vipul mittal
vipul mittal

Reputation: 17401

View v = new View(this);
v.setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT,      
        5
));
v.setBackgroundColor(Color.parseColor("#B3B3B3"));

LinearLay.addView(v);

Upvotes: 37

Related Questions