दिलचस्प पोस्ट
एक स्थिर वैरिएबल से लिंक क्यों नहीं होगा? चर === अपरिभाषित बनाम प्रकार के चर === "अपरिभाषित" पायथन 3, json ऑब्जेक्ट बाइट स्वीकार या urlopen आउटपुट स्ट्रिंग दें कोर एनीमेशन के साथ कस्टम सहजता फ़ंक्शन कैसे बनाएं? फार्म जमा पर PHP $ _POST सरणी खाली है Winforms- मैं कैसे मैसेन्बबॉक्स मेनफॉर्म पर केन्द्रित कर सकता हूं? छद्म-तत्व सामग्री के बाद :: या :: के लिए लाइन ब्रेक जोड़ें सी में फ्लशिंग बफ़र्स मैं नवीनतम निर्भरता के लिए package.json में प्रत्येक निर्भरता को कैसे अपडेट कर सकता हूं? obj.nil? बनाम obj == शून्य क्या एएससीएक्स सेवा के पीछे एएसआईएनसीसी / संभाल के लिए कोई रास्ता है? .htaccess रीडायरेक्ट को रीडायरेक्ट रूट यूआरएल को उपनिर्देशिका में डालें पायथन में PhantomJS का उपयोग करने का कोई तरीका है? पढ़ने के लिए पायथन रीडलाइन () उपयोग और कुशल अभ्यास जावा में फ्लोट और डबल डेटाटाइप

क्षैतिज स्क्रॉलिंग ग्रिड दृश्य

मुझे पता है कि एंड्रॉइड में ग्रिड दृश्य क्षैतिज स्क्रॉल करना संभव नहीं है। लेकिन जो मैं कर रहा हूं वह इस तरह क्षैतिज स्क्रॉल दृश्य के अंदर गतिशील रूप से छवि बटन जोड़ रहा है:

public class HorizontalScroller extends Activity { static int l=0; private Rect mTempRect = new Rect(); static int r1=0; static int t=0; static int b=0; static int x=0; static int y=0; //Button[] b1 = new Button[100]; ImageButton btn[][] = new ImageButton[10][10]; //ImageButton b1 = new ImageButton(this); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout rl = (LinearLayout)findViewById(R.id.widget92); LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); for(int i=0;i<4;i++) { for(int j=0;j<10;j++) {System.out.println("helo"); /* l=l+100; r1=r1+100; t=t+100; b=b+100;*/ //button(); //ImageButton btn=new ImageButton(this); /* Rect r = mTempRect; r.left=10; r.top=10; r.right=10; r.bottom=10; btn[i][j].getDrawingRect(r);*/ //btn[i][j].setId(j); Rect r = mTempRect; r.set(0,0,0,0); Rect r2 = mTempRect; r2.set(0,20,0,20); btn[i][j]=new ImageButton(this); btn[i][j]. setBackgroundResource(R.drawable.icon); btn[i][j].setMinimumWidth(20); btn[i][j].setMinimumHeight(20); params1.setMargins(5, 5, 5,5); rl.addView(btn[i][j],params1); System.out.println("1="+btn[i][j].getTop()); System.out.println("2="+btn[i][j].getLeft()); System.out.println("3="+btn[i][j].getRight()); System.out.println("4="+btn[i][j].getBottom()); } } } } 

लेकिन मुझे एक ही पंक्ति में सभी छवि बटन मिल रहे हैं मैं उन्हें ग्रिड जैसे संरचना में कैसे लागू कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "क्षैतिज स्क्रॉलिंग ग्रिड दृश्य"

आप ऐसा कर सकते हैं

  • एक HorizontalScrollView अंदर एक TableLayout उपयोग करें, या
  • एक क्षैतिज LinearLayout रेखा के साथ अपने दृष्टिकोण के साथ रहें, लेकिन सीधे छवियों के बजाय ऊर्ध्वाधर LinearLayout जोड़ने उदाहरण के लिए, चित्र में प्रत्येक ऊर्ध्वाधर LinearLayout में तीन से चार चित्र जोड़ना, और परिदृश्य में केवल दो जोड़ने के लिए तैयार करना

मैं पहले TableLayout दृष्टिकोण की कोशिश करूँगा

PS1: अगली बार के लिए, सभी गैर-प्रासंगिक कोड को हटाने का प्रयास करें (कम कोड है, यह समझने की आसान है कि आपने क्या किया)।

PS2: याद रखें कि System.out को आम तौर पर /dev/null पर रीडायरेक्ट किया जाता है और इस प्रकार खो जाता है, इसलिए मैं दृढ़ता से सुझाव देता हूं कि आप Log.d का उपयोग करें।

पूर्ण उदाहरण

इसे क्रिएट () पद्धति या जहां कहीं भी इसकी आवश्यकता है, इसे अनुकूलित करें:

 public void horizontalScrollGalleryLayout () { HorizontalScrollView sv = new HorizontalScrollView(this); LinearLayout llh = new LinearLayout(this); llh.setOrientation(LinearLayout.HORIZONTAL); LinearLayout.LayoutParams layoutParamsTV = new LinearLayout.LayoutParams(40, 40); LinearLayout.LayoutParams layoutParamsLL = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); for (int i=0; i<20; i++) { LinearLayout llv = new LinearLayout(this); llv.setOrientation(LinearLayout.VERTICAL); TestView testView1 = new TestView(this, Color.rgb(i*12, 0, 0)); TestView testView2 = new TestView(this, true, Color.rgb(i*12, i*12, 0)); TestView testView3 = new TestView(this, true, Color.rgb(0, i*12, 0)); llv.addView(testView1, layoutParamsTV); llv.addView(testView2, layoutParamsTV); llv.addView(testView3, layoutParamsTV); llh.addView(llv, layoutParamsLL); } sv.addView(llh, layoutParamsLL); setContentView(sv); } 

मैं एक उदाहरण के रूप में एक बहुत सरल दृश्य का उपयोग कर रहा हूं:

 public class TestView extends View { Context context; int color; public TestView(Context context, int color) { super(context); this.context = context; this.color = color; } @Override public void onDraw (Canvas canvas) { super.onDraw(canvas); this.setBackgroundColor(Color.LTGRAY); Paint paint = new Paint (Paint.ANTI_ALIAS_FLAG); paint.setColor(color); canvas.drawCircle(20, 20, 20, paint); } } 

क्षैतिज रूप से स्क्रॉलिंग ग्रिडव्यू को कार्यान्वित करना आपके कोडबेस (एडेप्टरव्यू, एब्सेलिस्टव्यू, ग्रिडव्यू, स्क्रॉलबार ड्रॉवेबल) में कुछ एंड्रॉइड स्रोत कोड वर्गों को कॉपी करने और क्षैतिज कोड को संभाल करने के लिए कोड में जोड़ना शामिल करता है। यह मुख्य रूप से कुछ कोड कॉपी कर रहा है और ऊपर से बाएं, नीचे से दाएं आदि में बदलता है। विस्तार करने के बजाय प्रतिलिपि बनाने का मुख्य कारण उन वर्गों की अंतिम प्रकृति है।

मैंने एक क्षैतिज स्क्रॉलिंग GridView को कुछ समय पहले लागू किया है और अंत में github पर पहुंचने के लिए आस पास है: https://github.com/jess-anders/two-way-gridview

एक बहुत आसान चाल है

  1. ग्रिड दृश्य को 270 डिग्री तक घुमाएं और कॉलम की संख्या को 2 के रूप में सेट करें
  2. प्रत्येक आइटम को 90 डिग्री में घुमाएं (ताकि आइटम को मूल अभिविन्यास के रूप में प्रदर्शित किया जा सके)।

यह कुछ के लिए उपयोगी हो सकता है !!

मैंने ऐसा किया है:

activity_main.xml :

 <HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <GridView android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="wrap_content"> </GridView> </LinearLayout> </HorizontalScrollView> 

मुख्य गतिविधि.जावा :

 GridView gridView = (GridView) findViewById(R.id.gridView); gridView.setNumColumns(arrayList.size()); GridViewAdapter gridViewAdapter = new GridViewAdapter(mContext, arrayList); gridView.setAdapter(gridViewAdapter); // Set dynamic width of Gridview setDynamicWidth(gridView); 

विधि के नीचे जोड़ें :

 private void setDynamicWidth(GridView gridView) { ListAdapter gridViewAdapter = gridView.getAdapter(); if (gridViewAdapter == null) { return; } int totalWidth; int items = gridViewAdapter.getCount(); View listItem = gridViewAdapter.getView(0, null, gridView); listItem.measure(0, 0); totalWidth = listItem.getMeasuredWidth(); totalWidth = totalWidth*items; ViewGroup.LayoutParams params = gridView.getLayoutParams(); params.width = totalWidth; gridView.setLayoutParams(params); } 

आशा है कि यह आपकी मदद करेगा।

मैंने पहले ही यह जवाब यहां पोस्ट कर लिया है , लेकिन दोनों प्रश्न समान हैं …


अब एंड्रॉइड में एक अच्छा समाधान है: हॉरिज़ॉन्टल ग्रिड दृश्य ।

1. Gradle निर्भरता

 dependencies { compile 'com.android.support:leanback-v17:23.1.0' } 

2. अपने लेआउट में इसे जोड़ें

your_activity.xml

 <!-- your stuff before... --> <android.support.v17.leanback.widget.HorizontalGridView android:layout_width="wrap_content" android:layout_height="80dp" android:id="@+id/gridView" /> <!-- your stuff after... --> 

3. लेआउट ग्रिड तत्व

अपने ग्रिड तत्व ( grid_element.xml ) के लिए एक लेआउट बनाएं। मैंने उसमें केवल एक बटन के साथ एक सरल बनाया है

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button" /> </LinearLayout> 

4. एक एडाप्टर बनाएँ

अत्यधिक इस लिंक से प्रेरित: https://gist.github.com/gabrielemariotti/4c189fb1124df4556058

 public class GridElementAdapter extends RecyclerView.Adapter<GridElementAdapter.SimpleViewHolder>{ private Context context; private List<String> elements; public GridElementAdapter(Context context){ this.context = context; this.elements = new ArrayList<String>(); // Fill dummy list for(int i = 0; i < 40 ; i++){ this.elements.add(i, "Position : " + i); } } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public final Button button; public SimpleViewHolder(View view) { super(view); button = (Button) view.findViewById(R.id.button); } } @Override public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final View view = LayoutInflater.from(this.context).inflate(R.layout.grid_element, parent, false); return new SimpleViewHolder(view); } @Override public void onBindViewHolder(SimpleViewHolder holder, final int position) { holder.button.setText(elements.get(position)); holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "Position =" + position, Toast.LENGTH_SHORT).show(); } }); } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return this.elements.size(); } } 

5. इसे अपनी गतिविधि में शुरू करें:

 private HorizontalGridView horizontalGridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity); horizontalGridView = (HorizontalGridView) findViewById(R.id.gridView); GridElementAdapter adapter = new GridElementAdapter(this); horizontalGridView.setAdapter(adapter); } 

अपनी ग्रिडलेआउट को लेआउट मैनेजर के रूप में सेट करने और क्षैतिज स्क्रॉल पर सेट करके रीसाइक्लिव्यू का उपयोग करें

 your recycle view.setLayoutManager(new GridLayoutManager(getActivity(),2, LinearLayoutManager.HORIZONTAL, false)) 

यहाँ 2 ग्रिड के लिए कॉलम अवधि है