Как сделать изображения в центре в линейном макете внутри горизонтальной прокрутки? - PullRequest
0 голосов
/ 14 апреля 2020

Пример диаграммы

У меня есть ImageViews, программно добавляемые в линейный макет, и я хочу, чтобы они центрировались в линейном макете, но сам макет выровнен по левому краю.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Создание макета с HorizontalScrollView в виде root и LinearLayout в качестве дочернего элемента

Для центрирования изображений обязательно используйте android:gravity="center" в LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="horizontal">

    <LinearLayout
        android:id="@+id/linearlayout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="horizontal">

    </LinearLayout>

</HorizontalScrollView>

И для программного добавления изображений, надуйте LinearLayout и используйте addView() метод

public class MainActivity extends AppCompatActivity {

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

        LinearLayout linearLayout = findViewById(R.id.linearlayout);

        linearLayout.addView(getImage(R.drawable.image1));
        linearLayout.addView(getImage(R.drawable.image2));
        linearLayout.addView(getImage(R.drawable.image3));

    }

    ImageView getImage(int drawable) {
        ImageView image = new ImageView(this);
        image.setLayoutParams(new 
                LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
                                          ViewGroup.LayoutParams.WRAP_CONTENT));
        image.setImageResource(drawable);
        return image;
    }

}
0 голосов
/ 14 апреля 2020

И в своем коде получите LinearLayout:

LinearLayout yourLinearLayout = (LinearLayout) findViewById(R.id.yourLinearLayout);

Определите общий объект LayoutParams:

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

И добавьте ваши ImageViews в свой LinearLayout с помощью для l oop :

for (int i = 0; i < imagesToAdd.size(); i++) {
 ImageView imgView = new ImageView(this);
 imgView.setImageResource("yourResourceID" + i);
 imgView.setLayoutParams(layoutParams);
 yourLinearLayout.addView(imgView);
}
...