2016-08-05 9 views
0

Ich habe ein Rasterlayout mit Breite = 3 und Höhe = 2 erstellt. Ich habe 6 Ansichten in jedes Rasterelement mit ids wie view1, view2, view3, view4, view5 und view 6 platziert. Nun, wie programmatisch Schaltflächen in jeder Ansicht platziert werden?Wie platziere ich Schaltflächen in meiner benutzerdefinierten Ansicht?

und schließlich, um dynamische Schaltflächen zu platzieren, habe ich den Code wie folgt verwendet.

das geht für child2,3 weiter etc ..video ist ein xml-layout mit einer button id als button.

das Layout ist als

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


    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#484848" 
     android:layout_weight=".1"> 
     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/imb1" 
      android:layout_weight=".07" 
      android:layout_marginBottom="7.5dp" 
      android:textColor="#ffffff" 
      android:src="@drawable/back" 
      android:adjustViewBounds="false" 
      android:background="#484848" /> 
     <ImageView 
      android:id="@+id/imageView" 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:layout_gravity="center_vertical" 
      android:background="#484848" 
      android:src="@drawable/medilearn1" 
      android:layout_weight=".15"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Dashboard" 
      android:id="@+id/textView3" 
      android:layout_gravity="center" 
      android:textColor="#fbfbfb" 
      android:textAlignment="viewStart" 
      android:layout_marginLeft="20dp" 
      android:layout_weight="0.67" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Restart" 
      android:id="@+id/button3" 
      android:layout_weight=".07" 
      android:background="#d86018" 
      android:textColor="#ffffff" 
      android:layout_marginTop="7.5dp" 
      android:layout_marginBottom="7.5dp" 
      android:layout_marginRight="7.5dp" /> 

    </LinearLayout> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#d8d8d8" 
    android:layout_weight=".9"> 
    <SearchView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/searchView" 
     android:background="#ffffff" 
     android:queryHint="search" 
     android:layout_gravity="center_horizontal" /> 
<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fillViewport="true" 
    android:background="#d8d8d8"> 
    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnCount="3" 
     android:rowCount="2" 
     android:id="@+id/gridView"> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view1" /> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view2" /> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view3" /> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view4" /> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view5" /> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="200dp" 
      android:layout_columnWeight="1" 
      android:id="@+id/view6" /> 

    </GridLayout> 
</ScrollView> 
</LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#484848" 
     android:layout_weight=".1"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Version:1.0" 
      android:id="@+id/textView6" 
      android:layout_gravity="center" 
      android:textColor="#fbfbfb" 
      android:textAlignment="viewStart" 
      android:layout_marginLeft="20dp" /> 

    </LinearLayout> 


    </LinearLayout> 

folgt Dies ist mein Layout.

Ich fand die Lösung. Ich erklärte in jedem Gitter mit Höhe und Breite wie mein Wunsch Linearlayout und Kind mit addView genannt() so,

LinearLayout lay1=(LinearLayout)view.findViewById(R.id.layout1); 

und dann

lay1.addView(child1); 
+0

machen Sie kundenspezifische gridview mit arrayAdapter und separaten gridview Reihe xml – Aditi

+0

sorry, ich u nicht understand.can kann mir bitte ein Beispiel geben. @ Aditi –

Antwort

0

Sie können eine Schaltfläche, um Ihre Ansicht wie diese hinzu.

Button btn = new Button(); 
btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
btn.setId(1); 
btn.setText("ButtonText"); 

yourView.addView(btn); 

Wenn Sie wollen, dass es Ihre ganze Sicht zu füllen, ersetzen LayoutParams.WRAP_CONTENT mit LayoutParams.MATCH_PARENT.

+0

dieses Nein ist nicht das, was ich will. –

0

nur gesetzt Adapter für Ihr Gridview

MyGridAdapter csAdapter = new MyGridAdapter(); 
    csGridView.setAdapter(csAdapter); 
    csGridView.setOnItemClickListener(gridItemClicked); 

und Adapter-Code ist

public AdapterView.OnItemClickListener gridItemClicked = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

//your code 

     } 
    }; 
0

aktualisieren: auf dem Layout Basierend Sie dort gebucht werden zwei Optionen können Sie verfolgen:

  1. Erstellen Sie das Layout in Ihrer XML-Datei: Sie könnten Ersetzen Sie einfach die Tags View durch Button Tags, wenn Ihr Layout statisch ist und immer diese Schaltflächen benötigen.
  2. Erstellen Sie das Layout dynamisch: Dazu benötigen Sie nicht die View Tags in Ihrem Layout, da diese programmgesteuert erstellt werden, so dass Sie diese entfernen können. Dann gehen Sie wie folgt die für jeden Button Sie erstellen möchten (Ich gehe davon aus das Layout der Tasten enthält video.xml genannt wird):

    View child = this.getActivity().getLayoutInflater().inflate(R.layout.video,null); 
    GridLayout.LayoutParams params = new GridLayout.LayoutParams(); 
    // set the row number this child is located in 
    params.rowSpec = GridLayout.spec(rowNum, 1); 
    // set the column number this child is located in 
    params.columnSpec = GridLayout.spec(colNum, 1); 
    child.setLayoutParams(params); 
    grid.addView(child); 
    

auch zu beachten, dass ein View kein Kind View haben kann, nur Layouts erweitern ViewGroup (zB FrameLayout, GridLayout, ...) kann Kind haben View s!


Der beste Weg, um die View in Ihrem Fall ist der folgende Code aufblasen:

GridLayout grid = view.findViewById(R.id.grid); // get the grid layout 
// ... 
child1 = this.getActivity().getLayoutInflater().inflate(R.layout.video, grid, true); 
video = (Button)child1.findViewById(R.id.button); 

Durch die Bereitstellung der Eltern (grid), wird die LayoutInflator kümmern richtig auf die angeforderte Ressource in das Aufblasen Ansichtshierarchie, fügt das true das überhöhte Layout dem Stammlayout hinzu.

Überprüfen Sie auch die API-Dokumentation für diese:

inflate(int resource, ViewGroup root, boolean attachToRoot): aufpumpen eine neue Ansicht Hierarchie aus der angegebenen XML-Ressource.

+0

es funktioniert nicht.Ich wollte dynamische Schaltflächen in 3 * 2 Raster und drei Schaltflächen sollten die gesamte Zeile in jedem Fall füllen. Ich habe grid.addView (Kind) verwendet, wobei Kind eine Ansicht ist. Aber es gab mir nicht, was ich wollte. Also habe ich 6 benutzerdefinierte Ansicht (3 in jeder Zeile) erstellt und ich möchte Schaltflächen einfügen. Wenn du eine bessere Lösung für dieses Problem hast, schlage vor: @ TR4Android –

+0

Was benutzt du als Root-Layout? Ein 'GridView',' GridLayout' oder etwas ganz anderes? – TR4Android

+0

ich aktualisierte das Layout. bitte prüfe. –