2015-07-05 2 views
0

Я хочу создать ImageView динамически и поместить его в центр центра. Я попытался сделать это в xml, и я смог. Я пытался преобразовать одну и ту же вещь в код, но imageView всегда появляется в левом верхнем углу экрана. Может кто-нибудь указать, что это за ошибка? Я все еще новичок в Android и нахожу свой путь. Могут быть и промахи.Невозможно центрировать линейную компоновку и, следовательно, изображение Посмотреть внутри

Благодаря

XML-файл

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_gravity="center_vertical"> 
<ImageView 
    android:id="@+id/myimg" 
    android:layout_width="100dip" 
    android:layout_height="100dip" 
    android:scaleType="fitXY" 
    android:layout_gravity="center_horizontal" 
    android:background="@drawable/exmp" 
    /> 
</LinearLayout> 

Код

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 

    Resources res = getResources(); 
    String pluginPackageName = this.getApplicationContext().getPackageName(); 

    int anim = res.getIdentifier("anim_android", "anim",pluginPackageName); 
    int transparent_style = res.getIdentifier("TransparentProgressDialog", "style", pluginPackageName); 
    int drawable_spinner = res.getIdentifier("exmp", "drawable", pluginPackageName); 

    LinearLayout layout = new LinearLayout(getApplicationContext()); 

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 

    layout.setLayoutParams(layoutParams); 
    layout.setGravity(Gravity.CENTER); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout.LayoutParams imageViewParams = new LinearLayout.LayoutParams((100),(100)); 
    imageViewParams.gravity = Gravity.CENTER_HORIZONTAL; 

    ImageView iv = new ImageView(getApplicationContext()); 
    iv.setLayoutParams(imageViewParams); 
    iv.setScaleType(ImageView.ScaleType.FIT_XY); 

    iv.setImageResource(drawable_spinner); 

    layout.addView(iv, imageViewParams); 
    addContentView(layout, imageViewParams); 
} 
+0

Вы пробовали 'layout.setGravity (Gravity.CENTER_VERTICAL);'? Это единственное различие, которое я вижу ... (и вам все еще нужны правильные параметры макета для 'addContentView()') – Karakuri

+0

Yup. Я тоже это пробовал, но я не получил вторую часть вашего комментария. Являются ли параметры макета неправильными? – Aadithya

+0

Вы вызываете 'addContentView (layout, imageViewParams)' вместо 'addContentView (layout, layoutParams)' – Karakuri

ответ

1

Чтобы сделать это так же, как в файле макета XML вы должны изменить addContentView(layout, imageViewParams); к setContentView(layout);

EDIT: полный код

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 

    Resources res = getResources(); 
    String pluginPackageName = this.getApplicationContext().getPackageName(); 

    //int anim = res.getIdentifier("anim_android", "anim",pluginPackageName); 
    //int transparent_style = res.getIdentifier("TransparentProgressDialog", "style", pluginPackageName); 
    //int drawable_spinner = res.getIdentifier("exmp", "drawable", pluginPackageName); 

    LinearLayout layout = new LinearLayout(getApplicationContext()); 

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 

    layout.setLayoutParams(layoutParams); 
    layout.setGravity(Gravity.CENTER); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout.LayoutParams imageViewParams = new LinearLayout.LayoutParams((100),(100)); 
    imageViewParams.gravity = Gravity.CENTER_HORIZONTAL; 

    ImageView iv = new ImageView(getApplicationContext()); 
    iv.setLayoutParams(imageViewParams); 
    iv.setScaleType(ImageView.ScaleType.FIT_XY); 

    iv.setImageResource(R.mipmap.ic_launcher); 

    layout.addView(iv, imageViewParams); 
    setContentView(layout); 
} 
+0

не имеет значения :( – Aadithya

+0

странно, я только что протестировал на своем устройстве и работает:/ Я разместил полный код, возможно, это поможет (смените подходящий на тот, который у вас есть) –

+0

У меня есть изображение в центре первого ряда сортирует.Что делать, чтобы получить его в центре экрана? – Aadithya

0

Вы это в качестве последней строки в OnCreate:

addContentView(layout, imageViewParams); 

Возможно, вы имели в виду это?

addContentView(layout, layoutParams); 

В качестве альтернативы, может быть, это:

setContentView(layout, layoutParams); 
+0

Изменение, которое не изменилось. Он все еще появляется на том же месте. Есть ли что-то еще, что мне не хватает? – Aadithya

0

Использование layoutGravity insted of сила тяжести.

imageViewParams.layoutGravity = Gravity.CENTER_HORIZONTAL; 
+0

Я не думаю, что есть такой параметр. Android Studio дала мне ошибку – Aadithya

0

Вы должны установить layout_gravity. Вы можете сделать так:

LinearLayout layout = new LinearLayout(getApplicationContext()); 
      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 

      layoutParams.gravity = Gravity.CENTER; 

      layout.setLayoutParams(layoutParams); 
      layout.setGravity(Gravity.CENTER); 
      layout.setOrientation(LinearLayout.VERTICAL); 
+0

Нужно ли st st Gravity для layoutParams и на макете снова? Разве это не так? – Aadithya

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