LinearLayout水平中心,具有自动边距/调整大小

时间:2018-03-27 14:11:22

标签: android android-linearlayout bottomnavigationview

enter image description here

我试图进行底部导航,但我无法摆脱没有边距的居中。项目应居中并在它们之间留有空间(最大宽度为168dp,最小宽度为80dp here)。因此它们之间需要有空间。水平线性布局有什么解决方案吗?

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="@android:color/white"
    android:clickable="true"
    android:clipToPadding="false"
    android:elevation="16dp"
    android:focusable="true"
    android:orientation="horizontal">

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

// ------------------------------------
// the layout of the item (another file)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?selectableItemBackgroundBorderless"
    android:clickable="true"
    android:focusable="true"
    android:gravity="center"
    android:maxWidth="168dp"
    android:minWidth="80dp"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:contentDescription="Icon"
        android:src="@drawable/ic_hd" />

    <me.konrad.rocket.ui.components.SimpleTextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="0dp"
        android:text="Home"
        android:textAlignment="center"
        android:textColor="#212121"
        android:textSize="10dp" />
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

如果你按照自己的方式行事,那么你可以使用下面的方法。让您的项目布局如下。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="?selectableItemBackgroundBorderless"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
    android:id="@+id/img"
    android:layout_width="wrap_content"
    android:src="@mipmap/ic_launcher"
    android:layout_height="wrap_content"
    />
<TextView
    android:id="@+id/txt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello"
    />

并在运行时将视图添加为。

 for(int i=0;i<4;i++){
        View mView=LayoutInflater.from(this)
                .inflate(R.layout.temp2,null);
        ((LinearLayout)findViewById(R.id.header)).addView(mView);
        ((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
    }

这似乎可以解决您的问题。但除此之外,您应该使用BottomNavigationView来获得更多的Material设计。它也很容易使用。