首页 > android 如何在setContentView()后得到layout中自定义view引用

android 如何在setContentView()后得到layout中自定义view引用

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root_view"
   >
     <com.study.jy.views.ButtonGridView
         android:id="@+id/btn_grid"
         android:layout_width="match_parent"
        >
     </com.study.jy.views.ButtonGridView>

</LinearLayout>

MainActivity.java:
方式1

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View rootView = View.inflate(this, R.layout.activity_main, null);
    setContentView(rootView);

    btnGrid = (ButtonGridView)rootView.findViewById(R.id.btn_grid);
   }

方式2

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnGrid = (ButtonGridView)findViewById(R.id.btn_grid);
   }

其中 ButtonGridView 是一个继承自GridLayout的自定义View。在以上两种方式中,获得的btnGrid引用全部都是空引用。请问如何得到layout中的自定义view引用?


首先谢邀(怎么才能装出不是第一次被邀的感觉?哈哈)。
正式回答问题:

其次,如果按照你上面的写法,错误在于布局文件里没有设置自定义View的android:layout_height而已。

自定义View获取id和普通View是一样的。

解决了上面的布局问题后,如果还有问题,那么还出错的话,那么问题在于自定义View的构造参数,你必须复写public ButtonGridView(Context context, AttributeSet attrs),或者带3个参数的那个,因为布局文件引用自定义View,必须在构造函数有AttributeSet attrs这个参数,便于自定义属性的引用。

【热门文章】
【热门文章】