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


Answers

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

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

Question

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

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());
            }
        }
    }
}

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




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

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);
 }

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




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

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

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