दिलचस्प पोस्ट
जावा में 'पर्मस्इज़' क्या है? वीबी में एसक्यूएल कमांड में पैरामीटर "@" का उपयोग कैसे करें Mysqli अद्यतन एक सदस्य समारोह bind_param () त्रुटि को कॉल फेंक संग्रहीत कार्यविधि और पैरामीटर के साथ डेटाएडैप्टर का उपयोग कैसे करें वैज्ञानिक संकेतन स्ट्रिंग से कन्वर्ट करने के लिए सी # में फ्लोट एक लिंक्ड सूची को सॉर्ट करें मर्ज करें खोज परिणाम नहीं मिला अगर "नल" ऑब्जेक्ट लौटें रेल में गतिशील बाइंडिंग के साथ एक कच्चे अद्यतन एसक्यूएल निष्पादित कैसे करें एक गतिशील क्रॉसस्टैब क्वेरी निष्पादित करें पाइप के साथ कई पॉपेन कमांड लिंक करें पेजिंग के बिना jqgrid लोड बड़े डेटा सेट Div के बजाय HTML5 सिमेंटिक टैग का उपयोग क्यों करना है (जावास्क्रिप्ट) कन्वर्ट बाइट छवि के लिए एनएसडीट की शुरुआत और दिन की समाप्ति WCF ChannelFactory बनाम प्रॉक्सी बनाम

छवि के चारों ओर प्रवाह करने के लिए लेआउट पाठ कैसे करें

क्या आप कृपया मुझे बता सकते हैं कि छवि के चारों ओर लेआउट टेक्स्ट का कोई तरीका क्या है? इस कदर:

------ text text text | | text text text ----- text text text text text text text text text text text 

मुझे इस प्रश्न के बारे में एंड्रॉइड डेवलपर से एक प्रतिक्रिया मिली है। लेकिन मुझे यकीन नहीं है कि टेक्स्टव्यू के अपने स्वयं के संस्करण के द्वारा वह क्या मतलब है? किसी भी सुझाव के लिए धन्यवाद

सोम, 8 फरवरी, 2010 को 11:05 बजे, रोमेन गुए ने लिखा:

नमस्ते,

केवल आपूर्ति किए गए विगेट्स और लेआउट्स का उपयोग करना संभव नहीं है आप यह करने के लिए TextView का अपना संस्करण लिख सकते हैं, यह कठिन नहीं होना चाहिए

Solutions Collecting From Web of "छवि के चारों ओर प्रवाह करने के लिए लेआउट पाठ कैसे करें"

अब यह संभव है, लेकिन केवल android.text.style.LeadingMarginSpan.LeadingMarginSpan2android.text.style.LeadingMarginSpan.LeadingMarginSpan2 का उपयोग करके संस्करण वाले उच्च या समान 2.2 के फोन के लिए। android.text.style.LeadingMarginSpan.LeadingMarginSpan2android.text.style.LeadingMarginSpan.LeadingMarginSpan2 इंटरफ़ेस जो एपीआई 8 में उपलब्ध है।

यहां लेख है , हालांकि अंग्रेजी में नहीं, लेकिन आप यहां से सीधे उदाहरण के स्रोत कोड को डाउनलोड कर सकते हैं ।

यदि आप अपने एप्लिकेशन को पुराने डिवाइसों के साथ संगत बनाना चाहते हैं, तो आप फ्लोटिंग टेक्स्ट के बिना एक अलग लेआउट प्रदर्शित कर सकते हैं। यहाँ एक उदाहरण है:

लेआउट (पुराने संस्करणों के लिए डिफ़ॉल्ट, नए संस्करणों के लिए प्रोग्रामेटिक रूप से बदल दिया जाएगा)

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/thumbnail_view" android:src="@drawable/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/message_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/thumbnail_view" android:textSize="18sp" android:text="@string/text" /> </RelativeLayout> 

सहायक वर्ग

 class FlowTextHelper { private static boolean mNewClassAvailable; static { if (Integer.parseInt(Build.VERSION.SDK) >= 8) { // Froyo 2.2, API level 8 mNewClassAvailable = true; } } public static void tryFlowText(String text, View thumbnailView, TextView messageView, Display display){ // There is nothing I can do for older versions, so just return if(!mNewClassAvailable) return; // Get height and width of the image and height of the text line thumbnailView.measure(display.getWidth(), display.getHeight()); int height = thumbnailView.getMeasuredHeight(); int width = thumbnailView.getMeasuredWidth(); float textLineHeight = messageView.getPaint().getTextSize(); // Set the span according to the number of lines and width of the image int lines = (int)FloatMath.ceil(height / textLineHeight); //For an html text you can use this line: SpannableStringBuilder ss = (SpannableStringBuilder)Html.fromHtml(text); SpannableString ss = new SpannableString(text); ss.setSpan(new MyLeadingMarginSpan2(lines, width), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); messageView.setText(ss); // Align the text with the image by removing the rule that the text is to the right of the image RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)messageView.getLayoutParams(); int[]rules = params.getRules(); rules[RelativeLayout.RIGHT_OF] = 0; } } 

MyLeadingMarginSpan2 वर्ग (एपीआई 21 का समर्थन करने के लिए अद्यतन)

 public class MyLeadingMarginSpan2 implements LeadingMarginSpan2 { private int margin; private int lines; private boolean wasDrawCalled = false; private int drawLineCount = 0; public MyLeadingMarginSpan2(int lines, int margin) { this.margin = margin; this.lines = lines; } @Override public int getLeadingMargin(boolean first) { boolean isFirstMargin = first; // a different algorithm for api 21+ if (Build.VERSION.SDK_INT >= 21) { this.drawLineCount = this.wasDrawCalled ? this.drawLineCount + 1 : 0; this.wasDrawCalled = false; isFirstMargin = this.drawLineCount <= this.lines; } return isFirstMargin ? this.margin : 0; } @Override public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) { this.wasDrawCalled = true; } @Override public int getLeadingMarginLineCount() { return this.lines; } } 

उपयोग का उदाहरण

 ImageView thumbnailView = (ImageView) findViewById(R.id.thumbnail_view); TextView messageView = (TextView) findViewById(R.id.message_view); String text = getString(R.string.text); Display display = getWindowManager().getDefaultDisplay(); FlowTextHelper.tryFlowText(text, thumbnailView, messageView, display); 

यह एप्लिकेशन एंड्रॉइड 2.2 डिवाइस पर दिखता है: एंड्रॉइड 2.2 छवि के चारों ओर पाठ बहती है

और यह एंड्रॉइड 2.1 डिवाइस के लिए है:

एंड्रॉइड 2.1 टेक्स्ट छवि के पास स्थित है

FlowTextHelper (vorrtex के उत्तर से) के लिए यहां एक सुधार है मैंने पाठ और छवि के बीच अतिरिक्त पैडिंग जोड़ने की संभावना जोड़ा और लाइन गणना में भी पैडिंग को ध्यान में रखकर सुधार किया। का आनंद लें!

 public class FlowTextHelper { private static boolean mNewClassAvailable; /* class initialization fails when this throws an exception */ static { try { Class.forName("android.text.style.LeadingMarginSpan$LeadingMarginSpan2"); mNewClassAvailable = true; } catch (Exception ex) { mNewClassAvailable = false; } } public static void tryFlowText(String text, View thumbnailView, TextView messageView, Display display, int addPadding){ // There is nothing I can do for older versions, so just return if(!mNewClassAvailable) return; // Get height and width of the image and height of the text line thumbnailView.measure(display.getWidth(), display.getHeight()); int height = thumbnailView.getMeasuredHeight(); int width = thumbnailView.getMeasuredWidth() + addPadding; messageView.measure(width, height); //to allow getTotalPaddingTop int padding = messageView.getTotalPaddingTop(); float textLineHeight = messageView.getPaint().getTextSize(); // Set the span according to the number of lines and width of the image int lines = (int)Math.round((height - padding) / textLineHeight); SpannableString ss = new SpannableString(text); //For an html text you can use this line: SpannableStringBuilder ss = (SpannableStringBuilder)Html.fromHtml(text); ss.setSpan(new MyLeadingMarginSpan2(lines, width), 0, ss.length(), 0); messageView.setText(ss); // Align the text with the image by removing the rule that the text is to the right of the image RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)messageView.getLayoutParams(); int[]rules = params.getRules(); rules[RelativeLayout.RIGHT_OF] = 0; } } 

यह सवाल मेरे प्रश्न के समान ही लगता है कि एंड्रॉइड में छवि के नीचे रिक्त स्थान रिक्त कैसे करें

मुझे फ्लोटेक्स्ट लाइब्रेरी का उपयोग करके समाधान मिला, कृपया पहले जवाब ढूंढिए, जो इससे आपकी सहायता कर सकता है

वोरेटेक्स और रोनेन के जवाब मेरे लिए एक विस्तार को छोड़कर काम कर रहे हैं – छवि के चारों ओर पाठ लपेटने के बाद छवि के नीचे एक अजीब "नकारात्मक" मार्जिन और विपरीत दिशा में था मुझे पता चला कि जब SpannableString पर अवधि सेट मैं बदल दिया है

 ss.setSpan(new MyLeadingMarginSpan2(lines, width), 0, ss.length(), 0); 

सेवा मेरे

 ss.setSpan(new MyLeadingMarginSpan2(lines, width), 0, lines, 0); 

जो छवि के बाद अवधि को रोक दिया सभी मामलों में आवश्यक नहीं हो सकता है लेकिन मुझे लगता है कि मैं साझा करेगा।

"लेकिन मुझे यकीन नहीं है कि टेक्स्टव्यू के अपने स्वयं के संस्करण के द्वारा वह क्या मतलब है?"

उनका मतलब है कि आप कक्षा android.widget.TextView (या कैनवास या कुछ अन्य प्रस्तुत करने योग्य सतह) का विस्तार कर सकते हैं और अपने खुद के अधिभावी संस्करण को लागू कर सकते हैं, जो उनके चारों ओर बहने वाले पाठ के साथ एम्बेडेड छवियों को अनुमति देता है।

इस पर निर्भर करता है कि आप इसे कैसे सामान्य बनाते हैं यह बहुत काम हो सकता है

आजकल आप लाइब्रेरी का उपयोग कर सकते हैं: https://github.com/deano2390/FlowTextView इस कदर:

 <uk.co.deanwild.flowtextview.FlowTextView android:id="@+id/ftv" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:padding="10dip" android:src="@drawable/android"/> </uk.co.deanwild.flowtextview.FlowTextView> 

मैं द माइलिंगिंग मार्गिनस्पैन 2 क्लास के लिए और अधिक आरामदायक निर्माता की पेशकश कर सकता हूं

  MyLeadingMarginSpan2(Context cc,int textSize,int height,int width) { int pixelsInLine=(int) (textSize*cc.getResources().getDisplayMetrics().scaledDensity); if (pixelsInLine>0 && height>0) { this.lines=height/pixelsInLine; } else { this.lines=0; } this.margin=width; }