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这个参数,便于自定义属性的引用。