我创建的一个是小气的多的自适应,但出于性能的考虑,我觉得它不是很有用。我添加了一些空的线性布局,并添加了权重,在Top、左、右、中、下添加自适应的边距。但是我想可能还有其他的解决方案来摆脱这些空布局,考虑到布局是自适应的。先谢谢你:)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".StacksGameActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:orientation="horizontal"
android:gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="2dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="2dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="2dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_n" />
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="2dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="@color/royal_blue_color">
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
android:layout_weight="1">
</LinearLayout>
你可以使用一个 GridLayoutManager 以摆脱这个空的LinearLayouts,这可能会影响性能。
你可以在资源中设置一个整数。
<integer name="grid_column_count">1</integer>
然后在代码中获取它
int gridColumnCount =
getResources().getInteger(R.integer.grid_column_count);
然后使用它
mRecyclerView.setLayoutManager(new
GridLayoutManager(this, gridColumnCount));
设置你的项目居中,然后为整数设置不同的值。grid_column_count
根据设备宽度的不同,将其值放在不同的资源目录中。
这样你就不会使用空的线性布局,并且会根据设备宽度的不同,用不同的列数实现相同的外观和感觉。
你可以看到一个完整的例子,即在 Android基础知识05.3: 自适应布局 编码实验室。