2016-07-31 6 views
0

Ich möchte eine dynamische Gridview programmaticaly erstellen. Alle Dinge sehen gut aus. Der Rand für jede Zelle wird jedoch nicht angezeigt. Bitte helfen Sie.Create GridView mit Rand für jede Zelle programmgesteuert

PagerAdapter:

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    Calendar viewData = getData(position); 
    GridView gridView = new GridView(mContext); 
    gridView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT)); 
    gridAdapter = new GridAdapter(mContext, viewData); 
    gridView.setNumColumns(4); 
    gridView.setAdapter(gridAdapter); 
    container.addView(view); 
    return gridView; 
} 

GridAdapter

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false); 
    layout.setLayoutParams(new GridView.LayoutParams(2, 2)); 
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name); 
    lblDisplay.setText(getDisplayText(position)); 

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){ 
     layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell)); 
    } 
    return layout; 
} 

Und mein cal_single_cell.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="wrap_content" android:theme="@style/CalendarSingleCell"> 

    <TextView 
     android:id="@+id/lbl_cell_name" 
     android:text="Jan" 
     android:textSize="18dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="64dp" 
     android:gravity="center" /> 

</LinearLayout> 

view display result on google drive

+0

Hallo @ NguyenDang, antwortete ich auf Ihr Problem, aber keine Antwort, keine Informationen, dass meine Antwort Ihnen geholfen oder nicht. Wenn meine Antwort hilft, dann stellen Sie bitte die richtige Antwort ein. Vielen Dank. –

+0

Hallo Maciej Sikora, Es funktioniert immer noch nicht für mich, wenn ich sage: ViewGroup Layout = (ViewGroup) inflater.inflate (R.layout.cal_single_cell, Eltern, falsch); layout.setLayoutParams (neue GridView.LayoutParams (2, 2)); Ich habe eine weiße Seite. Und ich sehe ViewHolder ist ein wirklich gut für die Leistung. Vielen Dank. –

+0

Einfügen Ihr aktueller Code, ich werde Ihnen helfen, sehe ich im Kommentar, dass Sie es die ganze Zeit falsch machen. –

Antwort

0

Ich denke, Ihr Haupt Nebel Sie möchten den Zellenrand ändern und statt dessen den GridView-Rand ändern.

Verwenden Grid Attribute android: horizontalSpacing, android: verticalSpacing. Weitere Informationen in dieser Frage - Increase the grid spacing in android

Oder ändern Sie die Marge, Polsterung der Ansicht innerhalb der Zeilenansicht (jede Zellenansicht). Programically in Adapter getView Methode so etwas tun:

view.setLayoutParams(/* your layout params */); //where view is cell view 

In You Code:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false); 

    //**************************** 
    //here set padding or margin 

    layout.setLayoutParams(/* your layout params */); 

    //*************************** 
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name); 
    lblDisplay.setText(getDisplayText(position)); 

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){ 
     layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell)); 
    } 
    return layout; 
} 

WICHTIG

ändern Layout-Parameter in jedem getView ist sehr nicht optimal, Sie, wenn muss es dann erstellen ViewHolder.

+0

Hallo @Maciej Sikora, Vielen Dank für Ihre Unterstützung Ich füge GridView.LayoutParams zu jeder Zelle in meinem GridView in meinem aktualisierten Beitrag hinzu. Und ich hoffe, dass genug Informationen für Sie sind. Vielen Dank. –

Verwandte Themen