2015-09-13 6 views
0

В общем, я пытаюсь понять, возможно ли в Android произвольно изменить свойства представления программно.Программно изменить вид объектов Android

Я понимаю, что есть много свойств, которые можно изменить с помощью методов (например, TextView.setBackgroundColor() среди многих других), но нет методов для каждого возможного свойства.

В частности, я заинтересован в создании экземпляра пользовательского вида, а затем изменения layout_weight. Мне интересно узнать, как это сделать, но в целом я хочу знать, как я должен создавать пользовательский вид, если я не могу изменить его свойства программным путем. Я понимаю, что могу изменить все свои свойства в xml (включая пользовательские свойства xml), но я хочу иметь возможность создавать экземпляр представления во время выполнения.

ответ

3

layout_ атрибуты на самом деле немного отличается от большинства других вещей, как описано в this pro-tip: они инструкции к родительского ViewGroup и хранятся в их LayoutParams.

Например, layout_weight в LinearLayout можно найти в LinearLayout.LayoutParams. Это означает, что вы можете изменить их, выполнив

LinearLayout.LayoutParams params = 
    (LinearLayout.LayoutParams) yourCustomView.getLayoutParams(); 
// Set the weight however you like 
params.weight = 4.0f; 

Создание зрения позволяет сделать это, а также:

LinearLayout parentLayout = ...; 
YourCustomView yourCustomView = ...; 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.MATCH_PARENT, // width 
    LayoutParams.WRAP_CONTENT, // height 
    1.0f); // weight 
parentLayout.addView(yourCustomView, params); 
+0

Спасибо. В общем, могу ли я изменить свойства, обратившись к свойствам объекта LayoutParams? – Bob

+0

@Bob - да, обычно атрибуты 'layout_' будут связаны с общедоступными переменными или связанными с ними методами. – ianhanniballake

+0

Кстати, этот про-совет, с которым вы связались, был чрезвычайно полезен в понимании того, как эти вещи работают в целом. благодаря! – Bob

Смежные вопросы