2016-08-05 3 views
0

Я создал сетку с шириной = 3 и высотой = 2. Я разместил 6 видов в каждом элементе сетки с идентификаторами как view1, view2, view3, view4, view5 и view 6. Теперь, как поместить кнопки на каждом представлении программно?Как разместить кнопки в моем обычном режиме?

View child1,child2,child3,child4,child5,child6; 
    child1=(View)view.findViewById(R.id.view1); 
    child2=(View)view.findViewById(R.id.view2); 
    child3=(View)view.findViewById(R.id.view3); 
    child4=(View)view.findViewById(R.id.view4); 
    child5=(View)view.findViewById(R.id.view5); 
    child6=(View)view.findViewById(R.id.view6); 

и, наконец, чтобы разместить динамические кнопки, я использовал код, как показано ниже.

child1 = this.getActivity().getLayoutInflater().inflate(R.layout.video,null); 
         video = (Button)child1.findViewById(R.id.button); 

это продолжается для child2,3 и т. Д. Видео представляет собой xml-макет с кнопкой id в качестве кнопки.

раскладка выглядит следующим образом

<?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> 

Это мой макет.

Я нашел решение. Я объявил LinearLayout в каждой сетке с высоким и шириной, как мое желание и назвал ребенок с addView() так,

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

и затем

lay1.addView(child1); 
+0

сделать нестандартную GridView с arrayAdapter и отдельной GridView строки XML – Aditi

+0

извините, я не могу understand.can у пожалуйста, дайте мне пример. @ Адити –

ответ

0

Вы можете добавить кнопку на ваш взгляд, как это.:

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

yourView.addView(btn); 

Если вы хотите, чтобы заполнить весь ваш взгляд, заменить LayoutParams.WRAP_CONTENT с LayoutParams.MATCH_PARENT.

+0

Нет, это не то, что я хочу. –

0

просто установить адаптер для GridView

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

и закрепительного кода

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

//your code 

     } 
    }; 
0

Update: На основе макета вы публикуемые там два варианта вы можете продолжить:

  1. Создайте макет в своем XML-файле: вы можете просто замените теги View тегами Button, если ваш макет статичен и всегда будет нуждаться в этих кнопках.
  2. Создайте макет динамически: для этого вам не нужны теги View внутри вашего макета, поскольку они будут созданы программно, поэтому вы можете их удалить. Затем выполните следующие действия для каждого Button вы хотите создать (я предполагаю, что макет, содержащий кнопки называется video.xml):

    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); 
    

Кроме того, обратите внимание, что View не может иметь ребенка View, только макеты, простирающиеся ViewGroup (например, FrameLayout, GridLayout, ...) могут иметь ребенка View s!


Лучший способ надуть View в вашем случае следующий код:

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); 

Предоставляя родителя (grid), то LayoutInflator позаботится правильно надувать требуемый ресурс в иерархии представлений, true прикрепляет раздутый макет к корневому расположению.

Также проверьте API документацию для этого:

inflate(int resource, ViewGroup root, boolean attachToRoot): Накачайте новую иерархию вида из указанного XML-ресурса.

+0

это не работает. Я хотел поставить динамические кнопки в сетку 3 * 2, и три кнопки должны заполнить всю строку, в каждом случае. Я использовал grid.addView (child), где child - это представление. Но это не давало мне то, что я хочу. поэтому я создал 6 пользовательских представлений (по 3 в каждой строке), и я хочу поместить в него кнопки. если у вас есть лучшее решение для этого предложения plz. @ TR4Android –

+0

Что вы используете в качестве корневого макета? «GridView», «GridLayout» или что-то еще? – TR4Android

+0

i обновленный макет. пожалуйста, проверьте. –

Смежные вопросы