2012-05-03 11 views
10

मैंने इस subject को एंड्रॉइड टेक्स्टव्यू के आस-पास सीमा डालने के बारे में देखा है, और मैंने इसका इस्तेमाल किया। लेकिन अब, मैं एक रिश्तेदार लेआउट में स्थित विगेट्स के चारों ओर एक सीमा रखना चाहता हूं। मैं यह कैसे कर सकता हूं?एक एंड्रॉइड रिलेटिवेलआउट के आसपास सीमा कैसे डालें?

+0

चूंकि आपने कोई जवाब स्वीकार नहीं किया है, तो क्या आपने इस लिंक को http://stackoverflow.com/questions/832359 पर देखा है 9/कैसे-से-जोड़ने-नीचे-सीमा-में-relativelayout – surhidamatya

+0

आपका प्रश्न उत्तर के लिए डुप्लिकेट है कृपया इस लिंक को चेक करें। http://stackoverflow.com/a/17980889/801369 – dhuma1981

उत्तर

1

फ़्रेमलेआउट बनाएं जो आपकी सीमा का पृष्ठभूमि रंग प्राप्त करता है, और आपकी सीमा चौड़ाई का मार्जिन या पैडिंग बनाता है, और आपके रिलेवेटिवआउट में फ़्रेमलेआउट रखें। RelativeLayout में सीधे अपने फ्रेमलेआउट में टेक्स्ट व्यू रखें। poof तत्काल सीमा।

+0

मुझे समझ में नहीं आया, क्या आप कृपया मुझे एक उदाहरण दे सकते हैं? – AyaAndro

8
RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.borderEffect); // id fetch from xml 
ShapeDrawable rectShapeDrawable = new ShapeDrawable(); // pre defined class 

// get paint 
Paint paint = rectShapeDrawable.getPaint(); 

// set border color, stroke and stroke width 
paint.setColor(Color.GRAY); 
paint.setStyle(Style.STROKE); 
paint.setStrokeWidth(5); // you can change the value of 5 
layout.setBackgroundDrawable(rectShapeDrawable); 
33
    अपने res/drawable फ़ोल्डर में
  1. , एक नई फ़ाइल background_border.xml

बनाने इस फाइल में, आप इस तरह विजेट के लिए पृष्ठभूमि परिभाषित करेगा:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" > 
    <!-- This is the stroke you want to define --> 
    <stroke android:width="1dp" 
      android:color="@color/color_stroke"/> 

    <!-- Optional, round your corners --> 
    <corners android:bottomLeftRadius="0dp" 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp" 
      android:topRightRadius="0dp" /> 

    <!-- Optional, fill the rest of your background with a color or gradient, use transparent if you only want the border to be displayed--> 
    <gradient android:startColor="@android:color/transparent" 
       android:endColor="@android:color/transparent" 
       android:angle="90"/> 
</shape> 
  1. आपके विजेट की पृष्ठभूमि को खींचने योग्य कॉन्फ़िगरेशन पर सेट करें जिसे आपने अभी बनाया है

उदाहरण के लिए। यदि आप एक relativelayout पर अपनी सीमा रखना चाहता हूँ:

<RelativeLayout    
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/background_border" 
      android:padding="15dp"> 
    ... 
</RelativeLayout> 
-1

हालांकि सभी प्रदान की जवाब काम करते हैं, वे बहुत rigid.what हैं यदि आप सीमा रंग, अलग अलग स्क्रीन के लिए borderthickness अनुकूलित करने के लिए चाहते हैं। इसके लिए आपको मेरा समाधान करने की कोशिश करनी चाहिए। हम एक कस्टम रिलेवेटिवआउट बनाने में तीन चरणों का पालन करने जा रहे हैं जो आपको सीमा सीमा के लिए सीमा रंग और मोटाई प्रदान करने की अनुमति देता है।

1) एक वर्ग है कि RelativeLayout फैली बनाएँ और ड्रा विधि

public class BorderRelativeLayout extends RelativeLayout { 

    private float borderThickness; 
    private int borderColor; 

    public BorderRelativeLayout(Context context) { 
    this(context, null, 0); 
    } 

    public BorderRelativeLayout(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
    } 

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

    @Override 
    protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    Rect rect = new Rect(); 
    Paint paint = new Paint(); 
    paint.setColor(borderColor); 
    paint.setStrokeWidth(borderThickness); 
    getLocalVisibleRect(rect); 
    canvas.drawLine(rect.left, rect.bottom, rect.right, rect.bottom, paint); 
    } 

    private void init(Context context, AttributeSet attrs) { 
    setWillNotDraw(false); 

    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.BorderRelativeLayout); 

    borderThickness = array.getDimension(R.styleable.BorderRelativeLayout_borderThickness, 0.5f); 
    borderColor = array.getColor(R.styleable.BorderRelativeLayout_borderColor, 
     ContextCompat.getColor(context, R.color.colorPrimary)); 
    } 
} 

2) पर ओवरराइड attrs.xml में stylable गुण को परिभाषित करें

<declare-styleable name="BorderRelativeLayout"> 
    <attr name="borderThickness" format="dimension"/> 
    <attr name="borderColor" format="color"/> 
    </declare-styleable> 

3) आप कर चुके हैं और आप इसे उपयोग कर सकते हैं

<com.spacewek.spacewek.controls.BorderRelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/headLayout" 
     app:borderThickness="2dp" 
     app:borderColor="@color/divider_new_color"> 

</com.spacewek.spacewek.controls.BorderRelativeLayout> 
+0

यह अधिक है –

संबंधित मुद्दे