2012-06-26 2 views
0

Я немного смущен. У меня есть приложение, в котором пользователь рисует прямоугольные текстовые объекты. Я добавил несколько текстовых просмотров в относительный макет в моем xml (скажем, что у меня есть максимум 3 текстовых объекта). Объекты можно перемещать и изменять размер. Я добавил этот код для каждого TextViewandroid - как работает LayoutParams?

TextView tv=(TextView) findViewById(R.id.text1);    
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 
System.out.println(texts.get(i).Sx+ " , "+texts.get(i).Sy+ " , "+ texts.get(i).Lx+ " , "+texts.get(i).Ly); 
if(texts.get(i).Sx<=texts.get(i).Lx){ 
    if(texts.get(i).Sy<=texts.get(i).Ly){      
     lp.setMargins((int)texts.get(i).Sx, (int)texts.get(i).Sy, (int)texts.get(i).Lx, (int)texts.get(i).Ly); 
    } else{ 
     lp.setMargins((int)texts.get(i).Sx, (int)texts.get(i).Ly, (int)texts.get(i).Lx, (int)texts.get(i).Sy); 
    } 
} else{ 
    if(texts.get(i).Sy<=texts.get(i).Ly){ 
     lp.setMargins((int)texts.get(i).Lx, (int)texts.get(i).Sy, (int)texts.get(i).Sx, (int)texts.get(i).Ly); 
    } else{ 
     lp.setMargins((int)texts.get(i).Lx, (int)texts.get(i).Ly, (int)texts.get(i).Sx, (int)texts.get(i).Sy); 
    } 
}   
tv.setLayoutParams(lp); 
tv.setWidth((int)(texts.get(i).width)); 
tv.setHeight((int)(texts.get(i).height)); 
tv.setTextSize(texts.get(i).textSize); 
tv.setText(text.text); 
tv.setTextColor(Color.WHITE); 
tv.requestLayout(); 

Sx, Sy являются исходными воркует объекта в пикселях и Lx, Ly окончание COOS.

в XML я добавил это:

<RelativeLayout 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:id="@+id/texts" > 

    <TextView 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:id="@+id/text1" /> 

    <TextView 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:id="@+id/text2" /> 

    <TextView 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:id="@+id/text3" />    

</RelativeLayout> 

Это похоже на работу, как для размещения в текст в нужном месте. Но ширина и высота текста не кажутся правильными. Это проблема установки полей в пикселях? Некоторое просвещение было бы очень полезно прямо сейчас

+0

если ваш @ text1 заполняющей родителя по вертикали и по горизонтали, то ничего не остается для другого – max4ever

+0

это RelativeLayout, чтобы они могли быть одна над другой не может? Проблема в том, что имея только текст1, он также имеет проблемы – george

ответ

0

LayoutParams используются для динамического выравнивания вашего представления. Вы можете добавить правило к вашим параметрам, как показано ниже, внизу, внизу, сверху, выравнивать, маржи и все (то же, что и вы, используя xml), и, наконец, вы можете установить эти параметры макета для своего вида. Например:

// Set the params eg. for a button. 

    RelativeLayout.LayoutParams button_params = new RelativeLayout.LayoutParams(RelativeLayout 
     .LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    button_params.addRule(RelativeLayout.LEFT_OF, 
          any_view.getId()); 
    button_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 
          RelativeLayout.TRUE); 
    button_params.bottomMargin = screen_height/15; 
    button_params.rightMargin = 20; 
    button.setLayoutParams(button_params); 
+0

, но разве это не то же самое, что я делаю с методом lp.setMargin? Я хочу, чтобы мой TextView точно соответствовал полям, которые пользователь нарисовал. Я не могу предсказать, где находится ящик, но у меня есть coos (Sx, Sy, Lx, Ly). Я также попробовал \t \t \t \t lp.topMargin = (int) texts.get (i) .Sy; \t \t \t \t lp.bottomMargin = (int) texts.get (i) .Ly; \t \t \t \t lp.leftMargin = (int) texts.get (i) .Sx; \t \t \t \t lp.rightMargin = (int) texts.get (i) .Lx; но проблема все еще там – george

0

Вы сначала установили ширину/высоту в FILL_PARENT, а затем перепишете ее с помощью px?

попробовать что-то вроде этого

View temp = this.findViewById(recent); 
RelativeLayout.LayoutParams relativeParams = (LayoutParams) temp.getLayoutParams(); 

relativeParams.setMargins(0, 0, 0, 50); // llp.setMargins(left, top, right, bottom); 
relativeParams.width = 123; 
relativeParams.height = 123; 
temp.setLayoutParams(relativeParams); 
+0

Что вы подразумеваете под «недавним» в приведенном выше коде? Мой textView? или корневой относительный макет? – george

+0

ваш текстПросмотрите, в основном любое R.id.something – max4ever