2012-04-05 11 views
3

Auf Home Geröll der Anwendung, wie Sie das Menü anzeigen, die Android-Menü ähnelt, aber keine Elemente in bestimmten Zellen angezeigt werden müssen. Bei einem Raster von 3 x 3 müssen nur fünf Elemente angezeigt werden (Row, Col): [0,1], [1,0], [1,1], [1,2], [2,1] .Anzeige leeres Element in Rasteransicht

Wir haben GridView ausprobiert und Sichtbarkeit für GONE gesetzt (convertView.setVisibility (View.GONE);) für Elemente, die nicht angezeigt werden müssen. Danach wird das Objekt nicht im Raster angezeigt, aber wenn der Benutzer mit den Auf- und Ab-Tasten durch ein leeres Objekt blättert oder direkt auf ein leeres Objekt klickt, wird dieses Symbol hervorgehoben und so ausgewählt, als wäre es ein leeres Objekt im Raster. Wir wollen, da es leer ist, sollte es nicht auf Benutzerereignisse reagieren, die weder markiert noch ausgewählt sind.

-Code für Grid-Ansicht:

package org.XXX; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class XXXActivity extends Activity { 
    GridView MyGrid; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.maingrid); 
     MyGrid = (GridView)findViewById(R.id.MyGrid); 
     MyGrid.setAdapter(new ImageAdapter(this)); 


     MyGrid.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
       Toast.makeText(arg0.getContext(), position + " selected", Toast.LENGTH_LONG).show(); 

       switch(position) { 
       case 0:break; 
       case 1: 
        //Browse 
        Intent newIntent = new Intent(XXXActivity.this, YYYListItemIcons.class); 
        startActivity(newIntent); 
        break; 
       case 2:break; 
       case 3: 
        //Saved Searches 
        newIntent = new Intent(XXXActivity.this, ZZZListItemIcons.class); 
        startActivity(newIntent); 
        break; 
       case 4: 
        //Sign in 
        break; 
       case 5: 
        //Reminders 
        break; 
       case 6:break; 
       case 7: 
        //Sign up 
        break; 
       case 8:break; 
       } 
      } 

     }); 

     //onSearchRequested(); //to open search by default 
    } 


    public class ImageAdapter extends BaseAdapter 
    { 
     Context MyContext; 

     public ImageAdapter(Context _MyContext) 
     { 
      MyContext = _MyContext; 
     } 

     @Override 
     public int getCount() 
     { 
      return 9; 
     } 

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

      ViewHolder holder; 
      LayoutInflater mInflater = LayoutInflater.from(MyContext); 

      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.grid_item, null); 
       holder = new ViewHolder(); 
       holder.text = (TextView) convertView.findViewById(R.id.grid_item_text); 
       holder.icon = (ImageView) convertView.findViewById(R.id.grid_item_image); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      // Bind the data efficiently with the holder. 
      holder.text.setText(getTextId(position)); 
      holder.icon.setImageBitmap(BitmapFactory.decodeResource(MyContext.getResources(), getIconId(position))); 
      if(getIconId(position) == R.drawable.nothing) { 
       convertView.setVisibility(View.GONE); 
      } 
      return convertView; 
     } 

     @Override 
     public Object getItem(int arg0) { 
      return arg0; 
     } 

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

     private int getIconId(int position) { 
      int iconImages[] = { 
        R.drawable.nothing, 
        R.drawable.browse, 
        R.drawable.nothing, 
        R.drawable.saved_searches, 
        R.drawable.sign_in, 
        R.drawable.reminders, 
        R.drawable.nothing, 
        R.drawable.sign_up, 
        R.drawable.nothing 
      }; 
      return iconImages[position]; 
     } 

     private int getTextId(int position) { 
      int iconNames[] = { 
        R.string.nothing, 
        R.string.browse, 
        R.string.nothing, 
        R.string.saved_searches, 
        R.string.sign_in, 
        R.string.reminders, 
        R.string.nothing, 
        R.string.sign_up, 
        R.string.nothing 
      }; 
      return iconNames[position]; 
     } 

    } 

    static class ViewHolder { 
     TextView text; 
     ImageView icon; 
    } 

} 

Gridlayout:

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/MyGrid" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:padding="5dp" 
    android:verticalSpacing="5dp" 
    android:horizontalSpacing="20dp" 
    android:numColumns="auto_fit" 
    android:columnWidth="60dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center"> 
</GridView>    

PerItemIconLayout in Grid:

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

    <ImageView android:id="@+id/grid_item_image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </ImageView> 

    <TextView android:id="@+id/grid_item_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:gravity="center_horizontal" 
     android:textColor="#FFFFFF"> 
    </TextView> 

</LinearLayout> 
+0

können Sie bitte Ihren Code für die Gridview veröffentlichen? –

+0

hat den erforderlichen Code hinzugefügt. – Stauz

Antwort

0

Jetzt, wo Sie Ihren Code geschrieben haben, ich bin nicht sicher, ob Sie kann technisch entfernen, aber Sie können den "hervorgehobenen" Klick, über den Sie sprechen, auf diese Weise deaktivieren, wenn ein Benutzer c leckt auf eines der Icons, es wird nicht mehr hervorgehoben.

Dies kann über XML oder im Code erfolgen:

https://stackoverflow.com/questions/2865683/android-disable-highlighting-in-gridview 

Code: GridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); 
XML: android:listSelector="#00000000" 

Doch diese alle Symbole in Ihrem gridview beeinflussen.

Werfen Sie auch einen Blick auf diese:

https://stackoverflow.com/questions/5514629/how-to-disable-item-click-for-particular-positions-in-grid-view-in-android

+0

Wenn wir den Listen-Selektor einstellen, werden auch die erforderlichen Elemente nicht hervorgehoben. Also kann dieser Ansatz nicht befolgt werden. – Stauz

+0

Auch deaktivieren Element hat keinen Einfluss Benutzer kann immer noch das Element in der Liste auswählen und dies verursacht Highlight des Elements – Stauz

+0

In Ordnung, ich sehe. : P –

0
if(getIconId(position) == R.drawable.nothing) { 
convertView.setVisibility(View.GONE); 
} 

die obigen Zeilen von unten ersetzen und versuchen ....

if(getIconId(position) == R.drawable.nothing) { 
    convertView.setVisibility(View.GONE); 
    convertView.setClickable(false); 
    convertView.setEnabled(false); 
} 

versuchen, diesen Code in GetView().

+0

Funktioniert nicht, die gesamte Benutzeroberfläche wird in einer Zeile angezeigt, sodass kein Raster mehr angezeigt wird und nicht angezeigtes Element hervorgehoben wird. – Stauz

+0

versuche jetzt den code bearbeitet –

+0

Lass mich wissen, wenn das funktioniert, könnte das sehr nützlich sein: P –

Verwandte Themen