2013-05-13 2 views
0

Я знаю, что это, наверное, очень простой ответ, но я немного здесь. Я создаю пользовательский вид, 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. Может ли кто-нибудь дать мне какое-либо направление?

Спасибо!

ответ

0

Если у вас есть класс панели в xml, инфраструктура вызывает для вас правильный конструктор, передавая ему контекст и атрибуты. Вы можете создать новый атрибут в attrs.xml, и как только это будет сделано, вы можете передать длину бар с помощью XML, а также

<resources> 
    <declare-styleable name="Panel"> 
     <attr name="barLength" format="int" /> 
    </declare-styleable> 
</resources> 

Тогда в XML просто добавить barLength = п, так же, как и любой другой атрибут в xml, но без андроида: перед ним.

+0

но barLength будет варьироваться от экземпляра к экземпляру, поэтому я не могу передать его через XML, его нужно передать, когда каждый экземпляр создается через java, правильно? как я могу это сделать? – user2163853

+0

в качестве продолжения моего предыдущего комментария, мне просто нужно сделать простой метод setBarLength(), а затем использовать его в java для каждого создаваемого экземпляра? – user2163853

+0

Если вам нужно изменить его во время выполнения, да, просто создайте метод setBarLength и убедитесь, что он вызывает недействительность, чтобы принудительно выполнить перерисовку. Если вы просто хотите иметь несколько баров, каждый со своей собственной длиной, но эта длина не меняется для этого бара, то установка его через xml - это именно то, что вы хотите. –