2013-05-20 3 views
1

Я хочу реализовать изображение и текстовое поле рядом. Я достиг этого, используя XML. Однако я хотел достичь этого программно, но пока не повезло. Ниже приведены мои XML и Java-коды. Пожалуйста, помогите мне выполнить программно.Android - реализует представления программно

Я исполняю код Java во фрагменте.

CODE XML:

<RelativeLayout 
     android:id="@+id/rl1" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    > 

    <com.loopj.android.image.SmartImageView 
     android:id="@+id/my_image1" 
     android:layout_width="160dip" 
     android:layout_height="100dip" 
     android:adjustViewBounds="true" 
     android:scaleType="fitXY" 
     /> 

    <TextView 
     android:id="@+id/tv1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/my_image1" 
     android:layout_alignTop="@+id/my_image1" 
     android:layout_toRightOf="@+id/my_image1" 
     android:gravity="center_vertical" 
    /> 
</RelativeLayout> 

JAVA CODE:

RelativeLayout rl1 = new RelativeLayout(getActivity()); 
RelativeLayout.LayoutParams rlParams; 
rlParams = new RelativeLayout.LayoutParams(
       newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
rlParams.addRule(LinearLayout.VERTICAL); 
rl1.setLayoutParams(rlParams); 

SmartImageView siv1 = new SmartImageView(getActivity()); 
siv1.setId(rand.nextInt(50000) + 1); 
siv1.setLayoutParams(new LayoutParams(width,height)); 
siv1.setAdjustViewBounds(true); 
siv1.setScaleType(ScaleType.FIT_XY); 
siv1.setImageUrl(Uri); 

TextView tv1 = new TextView(getActivity()); 
RelativeLayout.LayoutParams relativeLayoutParams; 
relativeLayoutParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
tv1.setLayoutParams(relativeLayoutParams); 
relativeLayoutParams.setMargins(10, 0, 0, 0); 
tv1.setGravity(Gravity.CENTER_VERTICAL); 
tv1.setText("Sample Text"); 

rl1.addView(siv1); 
rl1.addView(tv1); 
ll.addView(rl1); 

При выполнении приведенного выше кода, я получаю изображение, но текст внутри изображения. Но, я хочу получить изображение слева и текст справа.

Заранее спасибо

ответ

1

Вы можете установить край текста как этот

relativeLayoutParams.setMargins(200, 0, 0, 0); 

, но это не лучшая практика так что одна вещь взять линейную раскладку установить ориентацию горизонтальный добавьте в него как изображение, так и текст, а затем добавьте этот linearlayout в ваш относительный макет. Надеюсь, это поможет.

+0

Спасибо. Обертывание релятивирования в linearlayout работало –

+0

@Lalith Mohan Это тоже сработает. Это большая разница, если что-то сработало и что-то сработало. Это вы избегаете этой проблемы, вопрос о том, подходит ли ваш путь, скорее является вопросом дизайна, ответы, которые ведут вас по-другому, иногда могут помешать вашей концепции. В следующий раз, если вы хотите, чтобы что-то просто работало, определите это, когда задаете вопрос. –

+0

Спасибо Марко. Я ценю вашу обеспокоенность. –

5

Добавить ниже код для вашей деятельности:

rlParams.addRule(RelativeLayout.ALIGN_TOP, siv1); 
rlParams.addRule(RelativeLayout.ALIGN_BOTTOM, siv1); 
rlParams.addRule(RelativeLayout.RIGHT_OF, siv1); 
tv1.setLayoutParams(rlParams); 

, а затем сделать:

rl1.addView(siv1); 
rl1.addView(tv1); 

Надеется, что это помогает.

+1

Это хороший ответ: вам не хватает правил, как в вашем XML, 'android: layout_alignBottom =" @ + id/my_image1 " android: layout_alignTop =" @ + id/my_image1 " android: layout_toRightOf =" @ + id/my_image1 ", и Гаган рассказал вам, как их устанавливать. –

+0

Спасибо, что указали это на Марко :) – Gagan

+0

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

2

В вашем случае лучше использовать горизонтальную LinearLayout:

LinearLayout ll = new LinearLayout(getActivity()); 
ll.setOrientation(LinearLayout.HORIZONTAL); 
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 
ll.setLayoutParams(param); 

TextView textview = new TextView(getActivity()); 
... 



SmartImageView siv1 = new SmartImageView(getActivity()); 
... 

ll.addView(textview); 
ll.addView(siv1); 
2

Чтобы выровнять точку в RelativeLayout гораздо сложнее. Я предлагаю вам использовать TableRows или LinearLayouts. Оба они дают намного более простой способ выравнивания представлений бок о бок. Вот источник, в котором один TextView выровнен - ​​слева с 4 ImageViews, выровненными справа. Вы можете получить представление об этом TextView taking/consuming too much space above and below the text

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