Как установить ImageView в центре макета из кода?

я попробую дальше

LinearLayout.LayoutParams b = new LinearLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                b.gravity =Gravity.CENTER;

                ivOne.setLayoutParams(b);

Но это не работает, вид изображения в левой части макета


person Kostya Khuta    schedule 27.06.2013    source источник
comment
Попробуйте использовать RelativeLayout вместо LinearLayout, RelativeLayout имеет свойство centerInParent.   -  person zozelfelfo    schedule 27.06.2013
comment
какой метод я должен использовать? Нет гравитации   -  person Kostya Khuta    schedule 27.06.2013
comment
LayoutParams b = новые LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT | RelativeLayout.CENTER_IN_PARENT); b.gravity =Gravity.CENTER; ivOne.setLayoutParams(b); это не работает   -  person Kostya Khuta    schedule 27.06.2013
comment
@KostyaKhuta: родительский макет должен быть RelativeLayout вместо LinearLayout   -  person Houcine    schedule 27.06.2013


Ответы (3)


попробуйте изменить родительский макет на RelativeLayout и используйте атрибут centerInParent :

RelativeLayout rootLayout = new RelativeLayout(this);
rootLayout.setLayoutParams( new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
ImageView ivOne = new ImageView(this);
ivOne.setImageResource(R.drawable.ic_launcher);
ivOne.setScaleType(ImageView.ScaleType.CENTER);
ivOne.setLayoutParams(params);
//TODO : add other views 
rootLayout.addView(ivOne);
person Houcine    schedule 27.06.2013

Вы не можете напрямую установить параметры для своего ImageView, вместо этого вы должны использовать ImageIcons

Попробуй это:

ImageIcons[i] = new ImageView(this);
ImageIcons[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
layoutParams.gravity=Gravity.CENTER;
ImageIcons[i].setLayoutParams(layoutParams);

Надеюсь, это работает .. работает отлично для меня .!

person Ankit Dhadse    schedule 27.06.2013

Вы можете использовать RelativeLayout и его свойство centerInParent, как сказал zozelfelfo, или вы можете придерживаться LinearLayout и попробовать следующее:

LinearLayout.LayoutParams b = new LinearLayout.LayoutParams(
                        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

                ivOne.setScaleType(ImageView.ScaleType.CENTER);

                ivOne.setLayoutParams(b);

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

person Akash    schedule 27.06.2013
comment
06-27 12:35:17.076: E/AndroidRuntime(3357): вызвано: java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams - person Kostya Khuta; 27.06.2013