2014-01-22 8 views
0

У меня есть пользовательский вид, я разместил внутри него TextView, и мне нужно изменить свойство макета для каждого дочернего вида по-разному. Я не буду в состоянии изменить TextView свойство с помощью XML,Динамическое изменение свойства childView

Вот мой XML:

<com.squareup.timessquare.CalendarRowView 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:paddingBottom="@dimen/calendar_day_headers_paddingbottom"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/CalendarCell.DayHeader" 
      /> 
    </com.squareup.timessquare.CalendarRowView> 

Выше XML-файл, в котором есть 8 TextView определяется Я хочу каждый TextView имеют различную ширину,

и после это Java код, который ...

public static MonthView create(ViewGroup parent, LayoutInflater inflater, 
     DateFormat weekdayNameFormat, Listener listener, Calendar today) 
    { 
    final MonthView view = (MonthView) inflater.inflate(R.layout.month, parent, false); 
    final int originalDayOfWeek = today.get(Calendar.DAY_OF_WEEK); 

    int firstDayOfWeek = today.getFirstDayOfWeek(); 
    final CalendarRowView headerRow = (CalendarRowView) view.grid.getChildAt(0); 
    for (int offset = 0; offset < 7; offset++) 
    { 
     today.set(Calendar.DAY_OF_WEEK, firstDayOfWeek + offset); 
     final TextView **textView** = (TextView) headerRow.getChildAt(offset); 
     textView.setText(weekdayNameFormat.format(today.getTime())); 
    } 
    today.set(Calendar.DAY_OF_WEEK, originalDayOfWeek); 
    view.listener = listener; 
    return view; 
    } 

ответ

0

Использование Inflater с ограничениями XML макеты к тому, что было в XML.

Для динамического изменения свойства макета необходимо создать макет динамически, а также, Например:

CalendarRowView calenderViewGroup = new CalendarRowView(thisContext); 
int widthNeeded = 300; // in pixels 
TextView someTextView = new TextView(thisContext); 
someTextView.setText("this is my text"); 
someTextView.setWidth(widthNeeded); 
someTextView.setLayoutParams(new LayoutParams(
     LayoutParams.FILL_PARENT, 
     LayoutParams.WRAP_CONTENT)); 

calenderViewGroup.addView(someTextView); 

См общедоступных методов здесь http://developer.android.com/reference/android/widget/TextView.html для более доступных методов.

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