दिलचस्प पोस्ट
कैसे svg पीएनजी को html5 कैनवास / जावास्क्रिप्ट / jquery का उपयोग करने और सर्वर पर सहेजना है xampp MySQL प्रारंभ नहीं होता है पॉपओवर को ऐसे दृश्य से प्रस्तुत नहीं किया जा सकता है जिसमें खिड़की नहीं है जब संग्रह का आदेश दिया जाता है तो क्या LINQ द्विआधारी खोज का उपयोग कर सकता है? जावा प्रोग्राम को समाप्त करना बहु-चरित्र निरंतर चेतावनियां पॉलिमर 1.0: क्या एक विशेषता से एक पॉलिमर फ़ंक्शन को तर्क देने का कोई तरीका है? ReadDirectoryChangesW क्यों नहीं छोड़ें ईवेंट? दो-तरफ़ा एन्क्रिप्शन: मुझे ऐसे पासवर्ड संग्रहीत करने की आवश्यकता होती है जिन्हें पुनर्प्राप्त किया जा सकता है एक्सेल में बाहरी डेटा क्वेरी के लिए पैरामीटर कैसे जोड़ें, जिसे ग्राफ़िक रूप से प्रदर्शित नहीं किया जा सकता? सीखना नियमित अभिव्यक्ति एंड्रॉइड से पीएचपी सर्वर पर छवियां अपलोड करना क्रोम / आईई 9 में छवि सीमा को निकालना वास्तविक समय डेटा के लिए websocket बनाम बाकी एपीआई? # 1273 – अज्ञात मिलान: 'utf8mb4_unicode_ci' cpanel

एंड्रॉइड – रेखीय लहराते बच्चे लपेटने के साथ क्षैतिज

क्या एंड्रॉइड के लिनियर लेआउट के लिए सेट करने के लिए कोई संपत्ति है जो इसे बाल नियंत्रणों को ठीक से लपेटने में सक्षम करेगी?

अर्थ – मेरे पास बच्चों की संख्या में परिवर्तनशील संख्या है और वे उन्हें क्षैतिज रूप से पसंद करना चाहते हैं:

 उदाहरण: कंट्रोल 1, कंट्रोल 2, कंट्रोल 3, ...

मैं यह सेट करके करता हूं:

 ll.setOrientation (LinearLayout.HORIZONTAL);
 विदेशी बाल (बच्चों में बाल सी)
   ll.addView (ग);

हालांकि, अगर मेरे पास बड़ी संख्या में बच्चे हैं, तो पिछली पंक्ति में जाने के बजाय, पिछले एक कट जाता है

कोई भी विचार कैसे तय किया जा सकता है?

Solutions Collecting From Web of "एंड्रॉइड – रेखीय लहराते बच्चे लपेटने के साथ क्षैतिज"

यह वही होना चाहिए जो आप चाहते हैं:

import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; /** * * @author RAW */ public class FlowLayout extends ViewGroup { private int line_height; public static class LayoutParams extends ViewGroup.LayoutParams { public final int horizontal_spacing; public final int vertical_spacing; /** * @param horizontal_spacing Pixels between items, horizontally * @param vertical_spacing Pixels between items, vertically */ public LayoutParams(int horizontal_spacing, int vertical_spacing) { super(0, 0); this.horizontal_spacing = horizontal_spacing; this.vertical_spacing = vertical_spacing; } } public FlowLayout(Context context) { super(context); } public FlowLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { assert (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED); final int width = MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft() - getPaddingRight(); int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingTop() - getPaddingBottom(); final int count = getChildCount(); int line_height = 0; int xpos = getPaddingLeft(); int ypos = getPaddingTop(); int childHeightMeasureSpec; if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); } else { childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child.getVisibility() != GONE) { final LayoutParams lp = (LayoutParams) child.getLayoutParams(); child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), childHeightMeasureSpec); final int childw = child.getMeasuredWidth(); line_height = Math.max(line_height, child.getMeasuredHeight() + lp.vertical_spacing); if (xpos + childw > width) { xpos = getPaddingLeft(); ypos += line_height; } xpos += childw + lp.horizontal_spacing; } } this.line_height = line_height; if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) { height = ypos + line_height; } else if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { if (ypos + line_height < height) { height = ypos + line_height; } } setMeasuredDimension(width, height); } @Override protected ViewGroup.LayoutParams generateDefaultLayoutParams() { return new LayoutParams(1, 1); // default of 1px spacing } @Override protected android.view.ViewGroup.LayoutParams generateLayoutParams( android.view.ViewGroup.LayoutParams p) { return new LayoutParams(1, 1, p); } @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { if (p instanceof LayoutParams) { return true; } return false; } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { final int count = getChildCount(); final int width = r - l; int xpos = getPaddingLeft(); int ypos = getPaddingTop(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child.getVisibility() != GONE) { final int childw = child.getMeasuredWidth(); final int childh = child.getMeasuredHeight(); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); if (xpos + childw > width) { xpos = getPaddingLeft(); ypos += line_height; } child.layout(xpos, ypos, xpos + childw, ypos + childh); xpos += childw + lp.horizontal_spacing; } } } } 

और XML फ़ाइल

 /* you must write your package name and class name */ <org.android.FlowLayout android:id="@+id/flow_layout" android:layout_marginLeft="5dip" android:layout_width="fill_parent" android:layout_height="wrap_content"/> 

इस तरह के व्यवहार की आवश्यकता वाले किसी के लिए:

 private void populateLinks(LinearLayout ll, ArrayList<Sample> collection, String header) { Display display = getWindowManager().getDefaultDisplay(); int maxWidth = display.getWidth() - 10; if (collection.size() > 0) { LinearLayout llAlso = new LinearLayout(this); llAlso.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); llAlso.setOrientation(LinearLayout.HORIZONTAL); TextView txtSample = new TextView(this); txtSample.setText(header); llAlso.addView(txtSample); txtSample.measure(0, 0); int widthSoFar = txtSample.getMeasuredWidth(); for (Sample samItem : collection) { TextView txtSamItem = new TextView(this, null, android.R.attr.textColorLink); txtSamItem.setText(samItem.Sample); txtSamItem.setPadding(10, 0, 0, 0); txtSamItem.setTag(samItem); txtSamItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { TextView self = (TextView) v; Sample ds = (Sample) self.getTag(); Intent myIntent = new Intent(); myIntent.putExtra("link_info", ds.Sample); setResult("link_clicked", myIntent); finish(); } }); txtSamItem.measure(0, 0); widthSoFar += txtSamItem.getMeasuredWidth(); if (widthSoFar >= maxWidth) { ll.addView(llAlso); llAlso = new LinearLayout(this); llAlso.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); llAlso.setOrientation(LinearLayout.HORIZONTAL); llAlso.addView(txtSamItem); widthSoFar = txtSamItem.getMeasuredWidth(); } else { llAlso.addView(txtSamItem); } } ll.addView(llAlso); } } 

मई 2016 तक Google ने अपना स्वयं का प्रवाह बॉक्स लेआउट बना दिया है जो उपर्युक्त पुस्तकालयों के समान कार्यक्षमता है।

आप यहां GitHub रेपो पा सकते हैं: https://github.com/google/flexbox-layout

पुराने प्रश्न, लेकिन अगर कोई यहाँ समाप्त होता है, तो दो पुस्तकालय जो बिल्कुल ऐसा करते हैं:

https://github.com/blazsolar/FlowLayout

https://github.com/ApmeM/android-flowlayout

इसी तरह की लेकिन सरल समस्या के समाधान के लिए खोज करना, जो कि क्षैतिज लेआउट में चाइल्ड टेक्स्ट सामग्री लपेट करना है kape123 के समाधान ठीक काम करता है लेकिन ClickableSpan का उपयोग करके, इस समस्या के लिए एक सरल एक खोजने के लिए शायद यह कुछ सरल केस के लिए उपयोगी हो सकता है स्निपेट:

  String[] stringSource = new String[sourceList.size()]; for (int i = 0; c < sourceList.size(); i++) { String text = sourceList.get(i); stringSource[i] = text; } SpannableString totalContent = new SpannableString(TextUtils.join(",", stringSource)); int start = 0; for (int j = 0; j < stringSource.length(); j++) { final String text = stringSource[j]; ClickableSpan span = new ClickableSpan() { @Override public void updateDrawState(TextPaint ds) { ds.setUnderlineText(true); ds.setColor(getResources().getColor(R.color.green)); } @Override public void onClick(View widget) { // the text clicked } }; int end = (start += text.length()); totalContent.setSpan(span, start, end, 0); star = end + 1; } TextView wrapperView = (TextView) findViewById(horizontal_container_id); wrapperView.setMovementMethod(LinkMovementMethod.getInstance()); wrapperView.setText(totalContent, BufferType.SPANNABLE); } 
 //this method will add image view to liner grid and warp it if no space in new child LinearLayout grid private void addImageToLinyerLayout(LinearLayout ll , ImageView v) { //set the padding and margin and weight v.setPadding(5, 5, 5, 5); Display display = getWindowManager().getDefaultDisplay(); int maxWidth = display.getWidth() - 10; int maxChildeNum = (int) ( maxWidth / (110)) ; Toast.makeText(getBaseContext(), "c" + v.getWidth() , Toast.LENGTH_LONG).show(); //loop through all child of the LinearLayout for (int i = 0; i < ll.getChildCount(); i++) { View chidv = ll.getChildAt(i); Class c = chidv.getClass(); if (c == LinearLayout.class) { //here we are in the child lay out check to add the imageView if there is space //Available else we will add it to new linear layout LinearLayout chidvL = (LinearLayout)chidv; if(chidvL.getChildCount() < maxChildeNum) { chidvL.addView(v); return; } } else{ continue; } } //if you reached here this means there was no roam for adding view so we will //add new linear layout LinearLayout childLinyer = new LinearLayout(this); childLinyer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); childLinyer.setOrientation(LinearLayout.HORIZONTAL); ll.addView(childLinyer); childLinyer.addView(v); } 

उपरोक्त विधि एमिग की तरफ और आपके लेआउट में इमेज विज़ुअल साइड जोड़ देगा

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/imageslayout" ></LinearLayout> 

मैं इस समाधान को पोस्ट कर सकता हूं, यह कुछ मदद कर सकता है और कुछ समय बचा सकता है और मैं इसे अपने ऐप में उपयोग कर सकता हूं

मैं एक टैगदृश्य का उपयोग कर समाप्त कर दिया :

 <com.cunoraz.tagview.TagView android:id="@+id/tag_group" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" /> TagView tagGroup = (TagView)findviewById(R.id.tag_view); //You can add one tag tagGroup.addTag(Tag tag); //You can add multiple tag via ArrayList tagGroup.addTags(ArrayList<Tag> tags); //Via string array addTags(String[] tags); //set click listener tagGroup.setOnTagClickListener(new OnTagClickListener() { @Override public void onTagClick(Tag tag, int position) { } }); //set delete listener tagGroup.setOnTagDeleteListener(new OnTagDeleteListener() { @Override public void onTagDeleted(final TagView view, final Tag tag, final int position) { } }); 

यहां छवि विवरण दर्ज करें