1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. phiLue, 07.12.2011 #1
    phiLue

    phiLue Threadstarter Neuer Benutzer

    Guten Abend liebe Android-Gemeinde,

    ich habe folgendes problem. Nämlich möchte ich Buttons in einen GridView laden, was auch wunderbar funktioniert. Im GridView kann ich ja nun die Breite der Spalten eingeben mit "Column width".

    Den Buttons gebe ich immer einen Background mit, welcher ein Selector ist. Dieser Selector enthählt Grafiken für den Button, welche nur proportional skalliert werden dürfen, da diese sonst verzerren.

    Wie ist das möglich? Ich hab schon eine Methode zum skallieren von Bildern, aber das funktioniert mit XML Dateien (selector) nicht. =/

    Ich möchte letzendlich wenn ich den Button mit dem Selector in den GridView einfüge, und dieser in der Breite gestreckt bzw. gestaucht wird, das dies in der Höhe auch automatisch passiert.

    Weiß hier vielleicht jemand was man da machen kann?
     
  2. swordi, 07.12.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    hmm so ganz weiß ich nicht, was dein problem ist, aber ich würde mal in richtung 9patch schauen.

    kennst du das?
     
  3. phiLue, 07.12.2011 #3
    phiLue

    phiLue Threadstarter Neuer Benutzer

    An sich kein schlechter Gedanke, nutz ich sonst auch überall wo es möglich ist und Sinn macht, aber hier geht dies leider nicht.

    Sagen wir mein Bild ist jetzt 144x180 Pixel groß mit 240 DPI. Im GridView soll die breite einer Spalte 90 betragen, was auch wunderbar funktioniert. Allerdings wird das Bild nun 90x180 dargestellt, und das ist natürlich dann völlig verzerrt.

    Wie ich es im Sourcecode verkleinern kann weiß ich leider nicht, da es sich hier nicht direkt um ein png handelt, sondern um einen Selector(xml), welche die png benutzt.

    //Edit:
    Letzendlich muss es keine größe von 90sp sein. Schöner wäre es ich könnte einfach sagen pro Reihe 3 Buttons und er würde es anhand der Bildschirmgröße dann skallieren.
     
    Zuletzt bearbeitet: 07.12.2011
  4. swordi, 07.12.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    naja mit layout weight kannst du das leicht bestimmen
     
  5. phiLue, 07.12.2011 #5
    phiLue

    phiLue Threadstarter Neuer Benutzer

    Hab danach gesucht, aber leider hat GridView.LayoutParams kein weight.
    Ich poste einfach mal den Quellcode den ich bis jetzt habe...

    Hier die XML Datei in der sich auch der GridView befindet:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="#FFFF">
      
          <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:background="@drawable/kopf_verlauf" android:layout_height="wrap_content" android:id="@+id/headerLayout">
        <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/logo" android:layout_width="fill_parent" android:layout_marginTop="20sp"></ImageView>
        <ui.widgets.menu.MenuOrangeButton android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/menuTopOrange" android:layout_marginBottom="5sp"></ui.widgets.menu.MenuOrangeButton>
            
        </LinearLayout>
        
        <RelativeLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingBottom="10sp" android:layout_below="@+id/headerLayout" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:id="@+id/contentLayout">
              
              <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:numColumns="auto_fit"
                android:stretchMode="spacingWidth"
                android:gravity="center"
                android:id="@+id/uebersichtGridView" android:verticalSpacing="3sp" android:horizontalSpacing="3sp" android:drawingCacheQuality="high" android:columnWidth="90sp"/>
              
          </RelativeLayout>
          <include android:id="@+id/slidingMenu" layout="@layout/sliding_menu_drawer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" />
    
        
    </RelativeLayout>
    
    Und hier der BaseAdapter den ich überschrieben hab und dem GridView hinzugefügt habe, wobei die ResourceID der Selector-XML in this.h.getGtList().get(position).getSelectorResID() steht:
    Code:
    public class UebersichtGridViewAdapter extends BaseAdapter {
    
        private Context mContext;
        private Haendler h;
        
        
        public UebersichtGridViewAdapter(Context c, Haendler h) {
            this.mContext = c;
            this.h = h;
        }
        
        @Override
        public int getCount() {
            return h.getGtList().size();
    
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return h.getGtList().get(position);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public View getView(final int position, final View convertView, ViewGroup parent) {
               Button b = new Button(this.mContext);
               
    
            
            if(position <= h.getGtList().size()) {
                GridView.LayoutParams lp = new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                b.setLayoutParams(lp);
                
                
                
                b.setBackgroundResource(this.h.getGtList().get(position).getSelectorResID());    
            
                b.setFocusable(false);
                b.setFocusableInTouchMode(false);
                b.setClickable(true);
    
                
            } else {
                // TODO: Blanko-Button without function
            }
            
            return b;
        }
    
    
    }
    
    
    Und so wird das ganze initialisiert:
    Code:
    getHaendler().setGtList((ArrayList<Typ>) result);
                    UebersichtGridViewAdapter adapter = new UebersichtGridViewAdapter(view, getHaendler());
                    
                    view.getContentGridView().setAdapter(adapter);
    Ich hoffe es wird jetzt ein bisschen klarer was ich möchte. :-(
     
    Zuletzt bearbeitet: 08.12.2011

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android grid an bildschirm anpassen