Ответ 1
Конструктор с Context
и AttributeSet
используется, когда ваше представление завышено от xml. Вы не должны использовать его для создания объекта. Вы должны использовать конструктор с 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
, вы должны использовать LayoutParams
, относящийся к этой группе ViewGroup. Это RelativeLayout.LayoutParams