2013-04-10 9 views
7

मेरे पास गतिशील ग्रिड व्यू है। इसका मतलब बदलता है। इसलिए, यदि वस्तुओं की संख्या बढ़ जाती है तो यह लंबवत स्क्रॉल बनाता है। मैं इसे क्षैतिज स्क्रॉल के रूप में बनाना चाहता हूं।एंड्रॉइड में क्षैतिज रूप से लंबवत रूप से ग्रिड व्यू स्क्रॉल कैसे करें?

कृपया इसके लिए कुछ समाधान सुझाएं।

+0

http://stackoverflow.com/questions/5725745/horizontal-scrolling-grid-view – Nermeen

+0

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

उत्तर

0

आप HorizontalScrollView में GridView डालने का प्रयास कर सकते हैं। आप HorizontalScrollView के अंदर GridView पर निश्चित ऊंचाई निर्धारित करने का प्रयास कर सकते हैं।

फिर आप अपनी सामग्री के आधार पर GridView के कॉलम की संख्या गतिशील रूप से गणना कर सकते हैं और इसे सेट करने के लिए setNumColumns(int) विधि का उपयोग कर सकते हैं।

+0

महान विचार! निश्चित रूप से कोशिश करेंगे। – marienke

+3

यह काम नहीं करता है। यह सिर्फ व्यूपोर्ट में सभी वस्तुओं का उपयोग करना चाहते कोशिश करता है, अभी तक कोई क्षैतिज स्क्रॉल – midnight

+0

आप 'HorizontalScrollView' अंदर' GridView' को निश्चित चौड़ाई सेट करने के लिए कोशिश कर सकते हैं प्रकट होता है। – jaibatrik

1

आप तृतीय पक्ष लाइब्रेरी two-way grid view का उपयोग कर सकते हैं। यह क्षैतिज स्क्रॉल के लिए महान काम करता है या यह है कि इस पर एक नजर है के लिए आप का उपयोग RecyclerView

2
 <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/seatLegendLayout"> 

     <FrameLayout 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent"> 

      <LinearLayout 
       android:id="@+id/linearLayout_gridtableLayout" 
       android:layout_width="900dp" 
       android:layout_height="match_parent" 
       android:orientation="horizontal"> 

       <GridView 
        android:id="@+id/gridView1" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_margin="4dp" 
        android:columnWidth="100dp" 
        android:gravity="center" 
        android:numColumns="9" 
        android:horizontalSpacing="1dp" 
        android:scrollbarAlwaysDrawHorizontalTrack="true" 
        android:scrollbarAlwaysDrawVerticalTrack="true" 
        android:scrollbars="horizontal" 
        android:stretchMode="none" 
        android:verticalSpacing="1dp"> 

       </GridView> 


      </LinearLayout> 
     </FrameLayout> 
    </HorizontalScrollView> 
+0

मैं अपनी आंतरिक संरचना और कहा एडाप्टर का उपयोग दस्तावेज़ कहते हैं की तरह है, लेकिन केवल 3 छवि एक दूसरे के नीचे दिखाई देता है और drig स्क्रॉल नहीं है, क्या तुम जानते हो क्यूं कर? https://developer.android.com/guide/topics/ui/layout/gridview.html –

+0

काम नहीं कर रहा है ... अद्यतन plz –

-1

यहाँ कुछ समाधान (अद्यतन) है:

<HorizontalScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="none" 
    android:id="@+id/title_horizontalScrollView" 
    android:layout_margin="1dp" 
    android:fillViewport="false"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 

     <GridView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/horizontal_gridView" 
      android:layout_gravity="center"/> 
    </LinearLayout> 
</HorizontalScrollView> 
:

अपनी गतिविधि एक्सएमएल को यह शामिल करें

लेआउट फ़ोल्डर में कस्टम ग्रिड आइटम बनाएँ:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/grid_item" 
    android:layout_width="120dp" 
    android:layout_height="30dp" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:gravity="center" 
    android:text="here is the text" 
    android:textAlignment="center" 
    android:textSize="15sp" 
    android:textStyle="bold" /> 
</RelativeLayout> 

से आप कोड से यह विन्यास के लिए (क्योंकि यह इस बात के लिए बेहतर तरीका है) और भी एडाप्टर के साथ यह महसूस की जरूरत है:

public class MainActivity extends AppCompatActivity { 

public GridView gridView; 

String[] models = {"Some text here", "and here" ,"and also here","one here","hello","here too"," and here"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    gridView = (GridView)findViewById(R.id.horizontal_gridView); 
    gridViewSetting(); 
} 


private void gridViewSetting() { 

    // this is size of your list with data 
    int size = models.length; 
    // Calculated single Item Layout Width for each grid element .. for me it was ~100dp 
    int width = 100 ; 

    // than just calculate sizes for layout params and use it 
    DisplayMetrics dm = new DisplayMetrics(); 
    this.getWindowManager().getDefaultDisplay().getMetrics(dm); 
    float density = dm.density; 

    int totalWidth = (int) (width * size * density); 
    int singleItemWidth = (int) (width * density); 

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      totalWidth, LinearLayout.LayoutParams.MATCH_PARENT); 

    gridView.setLayoutParams(params); 
    gridView.setColumnWidth(singleItemWidth); 
    gridView.setHorizontalSpacing(2); 
    gridView.setStretchMode(GridView.STRETCH_SPACING); 
    gridView.setNumColumns(size); 
    GridAdapter adapter = new GridAdapter(MainActivity.this, models); 
    gridView.setAdapter(adapter); 

} } 

यह कस्टम एडाप्टर के उदाहरण है:

public class GridAdapter extends BaseAdapter { 

private String[] modelsName; 

private Context context; 

private LayoutInflater inflater; 

public GridAdapter(Context con, String[] names) { 
    this.modelsName = names; 
    this.context = con; 
} 

@Override 
public int getCount() { 
    return modelsName.length; 
} 

@Override 
public Object getItem(int i) { 
    return modelsName[i]; 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    View gridView = view; 

    if(view == null) { 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     gridView = inflater.inflate(R.layout.custom_layout, null); 
    } 

    TextView text = (TextView) gridView.findViewById(R.id.grid_item); 

    text.setText(modelsName[i]); 

    return gridView; 
} } 

मैंसे इस समाधान ले लिया 0।

संबंधित मुद्दे