Я знаю, что это, наверное, очень простой ответ, но я немного здесь. Я создаю пользовательский вид, Panel
со следующим конструктору:Как создать экземпляр пользовательского представления при добавлении других аргументов?
public Panel(Context context, AttributeSet attrs, int barLength){
super(context, attrs);
//paint object for drawing in onDraw
barPaint = new Paint();
bar = new Rect(3, 13, barLength, 3); // Rect object
//...other stuff, etc etc
}
В деятельности, где будет использоваться этот вид, он будет создан пять различных раз в разных ячейках макета таблицы. Panel
- действительно простой Rect
, длина которого будет зависеть от аргумента barLength
.
Таким образом, в деятельности, где на самом деле созданы Panel
взгляды, они называются так:
private Panel tagBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tagBar = (Panel) findViewById(R.id.custView);
}
Как вы можете сказать, это не использовать конструктор I, описанной выше. Как создать новый Panel
, в том числе правильно передать его Context
и AttributeSet
? Теперь кажется, что при построении (без int barLength
в качестве аргумента) те просто передаются автоматически. Как следует создать экземпляр tagBar
, чтобы правильно передать все три аргумента?
Чтобы уточнить, attrs.xml является файлом атрибутов styleable
, который в основном используется, чтобы помочь установить цвета столбцов из xml. Может ли кто-нибудь дать мне какое-либо направление?
Спасибо!
но barLength будет варьироваться от экземпляра к экземпляру, поэтому я не могу передать его через XML, его нужно передать, когда каждый экземпляр создается через java, правильно? как я могу это сделать? – user2163853
в качестве продолжения моего предыдущего комментария, мне просто нужно сделать простой метод setBarLength(), а затем использовать его в java для каждого создаваемого экземпляра? – user2163853
Если вам нужно изменить его во время выполнения, да, просто создайте метод setBarLength и убедитесь, что он вызывает недействительность, чтобы принудительно выполнить перерисовку. Если вы просто хотите иметь несколько баров, каждый со своей собственной длиной, но эта длина не меняется для этого бара, то установка его через xml - это именно то, что вы хотите. –