编程语言
首页 > 编程语言> > 如何在android中以编程方式创建视图时传递AttributeSet

如何在android中以编程方式创建视图时传递AttributeSet

作者:互联网

我以编程方式创建像horizo​​ntalview那样,如何以编程方式传递AttributeSet.

我的构造函数看起来像这样:

public HorizontalListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

我试过这个:

mHlvSimpleList= new HorizontalListView(mcontext,R.style.niceview);

错误:

The constructor HorizontalListView(Context, int) is undefined

在style.xml中

<style name="niceview">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>

</style>

如何在horizo​​ntalistview构造函数匹配参数中传递AttributeSet?

解决方法:

当您的视图从xml中膨胀时,将使用具有Context和AttributeSet的构造函数.您不应该使用它来创建对象.您应该使用带有Context作为参数的构造函数.

AttributeSet是接口,您可以创建then的实例并实现所有方法,如下所示:

AttributeSet attrs = new AttributeSet(){
        @Override
        public int getAttributeCount() {
            return 0;
        }

        @Override
        public String getAttributeName(int index) {
            return null;
        }

        @Override
        public String getAttributeValue(int index) {
            return null;
        }

        @Override
        public String getAttributeValue(String namespace, String name) {
            return null;
        }

        @Override
        public String getPositionDescription() {
            return null;
        }

        @Override
        public int getAttributeNameResource(int index) {
            return 0;
        }

        @Override
        public int getAttributeListValue(String namespace, String attribute, String[] options, int defaultValue) {
            return 0;
        }

        @Override
        public boolean getAttributeBooleanValue(String namespace, String attribute, boolean defaultValue) {
            return false;
        }

        @Override
        public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
            return 0;
        }

        @Override
        public int getAttributeIntValue(String namespace, String attribute, int defaultValue) {
            return 0;
        }

        @Override
        public int getAttributeUnsignedIntValue(String namespace, String attribute, int defaultValue) {
            return 0;
        }

        @Override
        public float getAttributeFloatValue(String namespace, String attribute, float defaultValue) {
            return 0;
        }

        @Override
        public int getAttributeListValue(int index, String[] options, int defaultValue) {
            return 0;
        }

        @Override
        public boolean getAttributeBooleanValue(int index, boolean defaultValue) {
            return false;
        }

        @Override
        public int getAttributeResourceValue(int index, int defaultValue) {
            return 0;
        }

        @Override
        public int getAttributeIntValue(int index, int defaultValue) {
            return 0;
        }

        @Override
        public int getAttributeUnsignedIntValue(int index, int defaultValue) {
            return 0;
        }

        @Override
        public float getAttributeFloatValue(int index, float defaultValue) {
            return 0;
        }

        @Override
        public String getIdAttribute() {
            return null;
        }

        @Override
        public String getClassAttribute() {
            return null;
        }

        @Override
        public int getIdAttributeResourceValue(int defaultValue) {
            return 0;
        }

        @Override
        public int getStyleAttribute() {
            return 0;
        }
    }; 

并使用它

TextView textView = new TextView(this, attrs);

但这不是正确的方法.

您应该使用视图中的方法来设置视图的属性.

例如,设置LayoutParams是两种方法

首先通过方法setLayoutParams()

view.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

将视图添加到ViewGroup时的第二个;

viewGroup.addView(yourView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

如果您有或者想要将视图添加到例如RelativeLayout,则应使用与此ViewGroup相关的LayoutParams.它是RelativeLayout.LayoutParams

标签:android,android-styles
来源: https://codeday.me/bug/20191001/1837454.html