如何在自定义视图中放置按钮?

时间:2016-08-05 07:50:48

标签: java android button gridview

我创建了一个width = 3和height = 2的gridlayout。我在每个网格元素中放置了6个视图,其中id为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等.video是一个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()调用了child。所以,

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

然后

lay1.addView(child1);

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 

        }
    };

答案 2 :(得分:0)

<强>更新: 根据您发布的布局,您可以选择两个选项:

  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);
    
  3. 另请注意,View无法生成子View,只有ViewGroup的布局(例如FrameLayoutGridLayout,...)可以有孩子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资源中扩充新的视图层次结构。