क्या एक टेक्स्टव्यू के चारों ओर एक सीमा खींचना संभव है?
क्या एक टेक्स्टव्यू के चारों ओर एक सीमा खींचना संभव है?
जवाबों:
आप दृश्य के लिए पृष्ठभूमि के रूप में एक आरेखनीय (एक आयत) सेट कर सकते हैं।
<TextView android:text="Some text" android:background="@drawable/back"/>
और आयताकार ड्रा करने योग्य बैक.xml (रेस / ड्रा करने योग्य फ़ोल्डर में डालें):
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@android:color/white" />
<stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>
आप @android:color/transparent
पारदर्शी पृष्ठभूमि के लिए ठोस रंग का उपयोग कर सकते हैं । आप पाठ को सीमा से अलग करने के लिए पैडिंग का भी उपयोग कर सकते हैं। अधिक जानकारी के लिए देखें: http://developer.android.com/guide/topics/resource/drawable-resource.html
मुझे कुछ अलग (गैर-प्रोग्रामेटिक) तरीकों का सारांश दें।
अपने ड्रा करने योग्य फ़ोल्डर में XML फ़ाइल के रूप में निम्न को सहेजें (उदाहरण के लिए, my_border.xml):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- View background color -->
<solid
android:color="@color/background_color" >
</solid>
<!-- View border color and width -->
<stroke
android:width="1dp"
android:color="@color/border_color" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="2dp" >
</corners>
</shape>
तो बस इसे अपने TextView की पृष्ठभूमि के रूप में सेट करें:
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/my_border" />
और अधिक सहायता:
9-पैच एक स्ट्रेचेबल बैकग्राउंड इमेज है। यदि आप बॉर्डर के साथ एक इमेज बनाते हैं तो यह आपके टेक्स्ट व्यू को बॉर्डर देगा। आपको बस छवि बनाने की ज़रूरत है और फिर इसे अपने टेक्स्ट व्यू में पृष्ठभूमि पर सेट करें।
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/my_ninepatch_image" />
यहां कुछ लिंक दिए गए हैं जो यह बताएंगे कि 9-पैच छवि कैसे बनाएं:
एक परत-सूची का उपयोग करना
आप एक दूसरे के ऊपर दो आयतों को ढेर करने के लिए एक परत सूची का उपयोग कर सकते हैं। दूसरी आयत को पहले आयत से थोड़ा छोटा करके, आप एक सीमा प्रभाव बना सकते हैं। पहला (निचला) आयत सीमा रंग है और दूसरा आयत पृष्ठभूमि रंग है।
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Lower rectangle (border color) -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/border_color" />
</shape>
</item>
<!-- Upper rectangle (background color) -->
<item android:top="2dp">
<shape android:shape="rectangle">
<solid android:color="@color/background_color" />
</shape>
</item>
</layer-list>
android:top="2dp"
2dp द्वारा शीर्ष को सेट करना (इसे छोटा बनाता है)। यह पहली (निचली) आयत को सीमा प्रभाव देते हुए दिखाने की अनुमति देता है। आप इसे TextView बैकग्राउंड पर उसी तरह से लागू कर सकते हैं जिस तरह से shape
ड्रॉबल ऊपर किया गया था।
परत सूचियों के बारे में कुछ और लिंक इस प्रकार हैं:
9-पैच का उपयोग करना
आप बस एक ही बॉर्डर के साथ 9-पैच छवि बना सकते हैं। बाकी सब वही है जो ऊपर चर्चा में है।
एक दृश्य का उपयोग करना
यह एक तरह का ट्रिक है लेकिन यह अच्छी तरह से काम करता है अगर आपको दो व्यूज़ या बॉर्डर से एक सिंगल टेक्स्ट व्यू के बीच एक सेपरेटर जोड़ने की आवश्यकता हो।
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- This adds a border between the TextViews -->
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@android:color/black" />
<TextView
android:id="@+id/textview2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
यहाँ कुछ और लिंक दिए गए हैं:
border: 1px solid #999;
नहीं माना जाता है।
सरल तरीका यह है कि आप अपने टेक्स्ट व्यू के लिए एक दृश्य जोड़ सकते हैं। नीचे की सीमा रेखा के लिए उदाहरण:
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:text="@string/title"
android:id="@+id/title_label"
android:gravity="center_vertical"/>
<View
android:layout_width="fill_parent"
android:layout_height="0.2dp"
android:id="@+id/separator"
android:visibility="visible"
android:background="@android:color/darker_gray"/>
</LinearLayout>
अन्य दिशा सीमाओं के लिए, कृपया विभाजक दृश्य के स्थान को समायोजित करें।
मैंने टेक्स्टव्यू का विस्तार करके और मैन्युअल रूप से बॉर्डर खींचकर इस मुद्दे को हल किया है। मैंने यह भी जोड़ा ताकि आप चुन सकें कि कोई बॉर्डर बिंदीदार है या धराशायी।
public class BorderedTextView extends TextView {
private Paint paint = new Paint();
public static final int BORDER_TOP = 0x00000001;
public static final int BORDER_RIGHT = 0x00000002;
public static final int BORDER_BOTTOM = 0x00000004;
public static final int BORDER_LEFT = 0x00000008;
private Border[] borders;
public BorderedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public BorderedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BorderedTextView(Context context) {
super(context);
init();
}
private void init(){
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(4);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(borders == null) return;
for(Border border : borders){
paint.setColor(border.getColor());
paint.setStrokeWidth(border.getWidth());
if(border.getStyle() == BORDER_TOP){
canvas.drawLine(0, 0, getWidth(), 0, paint);
} else
if(border.getStyle() == BORDER_RIGHT){
canvas.drawLine(getWidth(), 0, getWidth(), getHeight(), paint);
} else
if(border.getStyle() == BORDER_BOTTOM){
canvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
} else
if(border.getStyle() == BORDER_LEFT){
canvas.drawLine(0, 0, 0, getHeight(), paint);
}
}
}
public Border[] getBorders() {
return borders;
}
public void setBorders(Border[] borders) {
this.borders = borders;
}
}
और सीमा वर्ग:
public class Border {
private int orientation;
private int width;
private int color = Color.BLACK;
private int style;
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getStyle() {
return style;
}
public void setStyle(int style) {
this.style = style;
}
public int getOrientation() {
return orientation;
}
public void setOrientation(int orientation) {
this.orientation = orientation;
}
public Border(int Style) {
this.style = Style;
}
}
आशा है कि यह किसी की मदद करता है :)
मैं बस एक समान जवाब देख रहा था - यह एक स्ट्रोक और निम्नलिखित ओवरराइड के साथ किया जा सकता है:
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
Paint strokePaint = new Paint();
strokePaint.setARGB(255, 0, 0, 0);
strokePaint.setTextAlign(Paint.Align.CENTER);
strokePaint.setTextSize(16);
strokePaint.setTypeface(Typeface.DEFAULT_BOLD);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(2);
Paint textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setTextSize(16);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);
canvas.drawText("Some Text", 100, 100, strokePaint);
canvas.drawText("Some Text", 100, 100, textPaint);
super.draw(canvas, mapView, shadow);
}
आप बॉर्डर को दो तरीकों से सेट कर सकते हैं। एक ड्रॉबल द्वारा है और दूसरा प्रोग्रामेटिक है।
<shape>
<solid android:color="@color/txt_white"/>
<stroke android:width="1dip" android:color="@color/border_gray"/>
<corners android:bottomLeftRadius="10dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="10dp"
android:topRightRadius="0dp"/>
<padding android:bottom="0dip"
android:left="0dip"
android:right="0dip"
android:top="0dip"/>
</shape>
प्रोग्रामेटिक
public static GradientDrawable backgroundWithoutBorder(int color) {
GradientDrawable gdDefault = new GradientDrawable();
gdDefault.setColor(color);
gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
radius, radius });
return gdDefault;
}
सबसे सरल समाधान जो मैंने पाया है (और जो वास्तव में काम करता है):
<TextView
...
android:background="@android:drawable/editbox_background" />
मुझे टेक्स्ट व्यू के चारों ओर बॉर्डर लगाने का एक बेहतर तरीका मिला।
पृष्ठभूमि के लिए नौ-पैच छवि का उपयोग करें। यह बहुत आसान है, एसडीके 9-पैच छवि बनाने के लिए एक उपकरण के साथ आता है, और इसमें बिल्कुल नहीं है कोडिंग ।
लिंक http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch है ।
आप अपने कोड में ऐसा कुछ जोड़ सकते हैं:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ffffff" />
<stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>
गोल कोनों बनाने के लिए नीचे दिए गए लिंक की जाँच करें http://androidcookbook.com/Recipe.seam?recipeId=2318
एक एंड्रॉइड प्रोजेक्ट में ड्रॉ करने योग्य फ़ोल्डर, रेस के तहत, बिटमैप (पीएनजी या जेपीजी फाइलों) तक ही सीमित नहीं है, लेकिन यह एक्सएमएल फाइलों में परिभाषित आकार भी पकड़ सकता है।
फिर इन आकृतियों को परियोजना में पुन: उपयोग किया जा सकता है। किसी लेआउट के चारों ओर बॉर्डर लगाने के लिए एक आकृति का उपयोग किया जा सकता है। यह उदाहरण घुमावदार कोनों के साथ एक आयताकार सीमा दिखाता है। Customborder.xml नामक एक नई फ़ाइल को ड्रा करने योग्य फ़ोल्डर में बनाया गया है (ग्रहण में फ़ाइल मेनू का उपयोग करें और फ़ाइल के नाम में ड्रा करने योग्य फ़ोल्डर चयनित प्रकार के साथ नया और फ़ाइल का चयन करें, समाप्त करें पर क्लिक करें)।
बॉर्डर को परिभाषित करने वाले XML में प्रवेश किया गया है:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="20dp"/>
<padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp"/>
<solid android:color="#CCCCCC"/>
</shape>
विशेषता android:shape
आयत पर सेट है (आकार फाइलें भी अंडाकार, रेखा और अंगूठी का समर्थन करती हैं)। आयत डिफ़ॉल्ट मान है, इसलिए यदि यह आयत परिभाषित किया जा रहा है तो इस विशेषता को छोड़ दिया जा सकता है। आकार फ़ाइल की विस्तृत जानकारी के लिए http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape पर आकृतियों पर Android दस्तावेज़ देखें ।
एलिमेंट कॉर्नर आयत कोनों को गोल करने के लिए सेट करता है। प्रत्येक कोने पर एक अलग त्रिज्या सेट करना संभव है (Android संदर्भ देखें)।
पैडिंग विशेषताओं का उपयोग व्यू की सामग्री को स्थानांतरित करने के लिए किया जाता है, जिसमें आकृति को लागू किया जाता है, ताकि सीमा को ओवरलैप करने वाली सामग्री को रोका जा सके।
यहां बॉर्डर का रंग हल्का ग्रे (CCCCCC हेक्साडेसिमल RGB मान) पर सेट है।
आकृतियाँ भी ढालों का समर्थन करती हैं, लेकिन यहाँ इसका उपयोग नहीं किया जा रहा है। फिर से, एंड्रॉइड संसाधनों को देखने के लिए देखें कि एक ढाल कैसे परिभाषित किया गया है। आकृति का उपयोग करके छंटनी पर लागू किया जाता हैandroid:background="@drawable/customborder"
।
लेआउट के भीतर अन्य विचारों को सामान्य रूप से जोड़ा जा सकता है। इस उदाहरण में, एक एकल TextView जोड़ा गया है, और पाठ सफेद है (FFFFFF हेक्साडेसिमल RGB)। पृष्ठभूमि को नीले रंग में सेट किया गया है, साथ ही चमक को कम करने के लिए कुछ पारदर्शिता (A00000FF हेक्साडेसिमल अल्फा आरजीबी मूल्य)। अंत में लेआउट को स्क्रीन किनारे से ऑफसेट किया जाता है और इसे थोड़ी मात्रा में पैडिंग के साथ दूसरे लेआउट में रखा जाता है। पूर्ण लेआउट फ़ाइल इस प्रकार है:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/customborder">
<TextView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Text View"
android:textSize="20dp"
android:textColor="#FFFFFF"
android:gravity="center_horizontal"
android:background="#A00000FF" />
</LinearLayout>
</LinearLayout>
मेरे पास इसे बहुत सरलता से करने का एक तरीका है, और मैं इसे साझा करना चाहूंगा।
जब मैं mi TextViews को स्क्वायर करना चाहता हूं, तो मैं उन्हें सिर्फ एक LinearLayout में डाल देता हूं। मैंने अपने रैखिक रंग की पृष्ठभूमि का रंग निर्धारित किया है, और मैं अपने पाठ दृश्य में एक मार्जिन जोड़ता हूं। परिणाम बिल्कुल वैसा ही है जैसे आप टेक्स्ट व्यू को चौकोर करते हैं।
मेरे मामले में काम नहीं करने के कारण कोंस्टेंटिन ब्यूरोव जवाब बदलना:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<stroke android:width="2dip" android:color="#4fa5d5"/>
<corners android:radius="7dp"/>
</shape>
</item>
</selector>
compileSdkVersion 26 (Android 8.0), minSdkVersion 21 (Android 5.0), targetSdkVersion 26, कार्यान्वयन 'com.android.support:appcompat-v7:26.1.0', grad: 4.1
आप अपने पाठ दृश्य के लिए कस्टम पृष्ठभूमि बना सकते हैं। चरण 1. अपनी परियोजना पर जाएं। 2. संसाधनों पर जाएं और ड्रा करने योग्य पर राइट क्लिक करें। 3. New -> Drawable Resource File पर क्लिक करें। आपको फाइल का नाम दिया जाए। 5. फाइल में दिए गए कोड को पेस्ट करें
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="@color/colorBlack" />
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp" />
<corners android:radius="6dp" />
<solid android:color="#ffffffff" />
अपने पाठ दृश्य के लिए जहां आप इसे बैकग्राउड के रूप में उपयोग करना चाहते हैं,
एंड्रॉयड: पृष्ठभूमि = "@ drawable / your_fileName"
यहाँ मेरा 'सरल' सहायक वर्ग है जो बॉर्डर के साथ एक ImageView देता है। बस इसे अपने बर्तनों के फ़ोल्डर में छोड़ दें, और इसे इस तरह से कॉल करें:
ImageView selectionBorder = BorderDrawer.generateBorderImageView(context, borderWidth, borderHeight, thickness, Color.Blue);
यहाँ कोड है।
/**
* Because creating a border is Rocket Science in Android.
*/
public class BorderDrawer
{
public static ImageView generateBorderImageView(Context context, int borderWidth, int borderHeight, int borderThickness, int color)
{
ImageView mask = new ImageView(context);
// Create the square to serve as the mask
Bitmap squareMask = Bitmap.createBitmap(borderWidth - (borderThickness*2), borderHeight - (borderThickness*2), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(squareMask);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(color);
canvas.drawRect(0.0f, 0.0f, (float)borderWidth, (float)borderHeight, paint);
// Create the darkness bitmap
Bitmap solidColor = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
canvas = new Canvas(solidColor);
paint.setStyle(Paint.Style.FILL);
paint.setColor(color);
canvas.drawRect(0.0f, 0.0f, borderWidth, borderHeight, paint);
// Create the masked version of the darknessView
Bitmap borderBitmap = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
canvas = new Canvas(borderBitmap);
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawBitmap(solidColor, 0, 0, null);
canvas.drawBitmap(squareMask, borderThickness, borderThickness, clearPaint);
clearPaint.setXfermode(null);
ImageView borderView = new ImageView(context);
borderView.setImageBitmap(borderBitmap);
return borderView;
}
}
selectionBorder
करूं?
यह आपकी मदद कर सकता है।
<RelativeLayout
android:id="@+id/textbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@android:color/darker_gray" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="3dp"
android:background="@android:color/white"
android:gravity="center"
android:text="@string/app_name"
android:textSize="20dp" />
</RelativeLayout
बॉर्डर के रंग और आपके टेक्स्ट दृश्य के आकार के रूप में पृष्ठभूमि रंग के साथ एक सीमा दृश्य बनाएं। सीमा की चौड़ाई के रूप में सीमा दृश्य पैडिंग सेट करें। टेक्स्ट व्यू बैकग्राउंड कलर सेट करें जैसा कि आप टेक्स्ट व्यू के लिए चाहते हैं। अब अपने टेक्स्ट व्यू को बॉर्डर व्यू के अंदर जोड़ें।
इसे इस्तेमाल करे:
<shape>
<solid android:color="@color/txt_white"/>
<stroke android:width="1dip" android:color="@color/border_black"/>
</shape>
टेक्स्ट व्यू में बॉर्डर जोड़ने के कई तरीके हैं। सबसे सरल एक कस्टम ड्रॉबल बनाकर उसे android:background="@drawable/textview_bg"
अपने टेक्स्ट व्यू के लिए सेट करना है ।
Textview_bg.xml ड्रॉबल्स के तहत जाएगा और ऐसा कुछ हो सकता है। तुम एक हो सकता है solid
या एक gradient
पृष्ठभूमि (या कुछ भी नहीं करता है, तो आवश्यक नहीं), corners
एक कोने दायरा जोड़ने के लिए औरstroke
सीमा को जोड़ने के लिए।
textview_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="@dimen/dp_10"/>
<gradient
android:angle="225"
android:endColor="#FFFFFF"
android:startColor="#E0E0E0" />
<stroke
android:width="2dp"
android:color="#000000"/>
</shape>
अपने xml टेक्स्टव्यू पर setBackground,
अपनी drawable निर्देशिका में rounded_textview.xml फ़ाइल जोड़ें।
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@android:color/white" />
<stroke android:width="2dip" android:color="#4f5g52"/>
</shape>
textView पृष्ठभूमि में ड्रा करने योग्य फ़ाइल सेट करें।
वास्तव में, यह बहुत सरल है। यदि आप Textview के पीछे एक साधारण ब्लैक आयत चाहते हैं, तो बस TextView android:background="@android:color/black"
टैग्स में जोड़ें । ऐशे ही:
<TextView
android:textSize="15pt" android:textColor="#ffa7ff04"
android:layout_alignBottom="@+id/webView1"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@android:color/black"/>