如何在嵌套线性布局中使 imageButton 的高度占屏幕尺寸的 25%。 Android XML 横向布局

Posted

技术标签:

【中文标题】如何在嵌套线性布局中使 imageButton 的高度占屏幕尺寸的 25%。 Android XML 横向布局【英文标题】:How to make imageButton' height take 25% of screen sizes in nested linear layout. Android XML landscape layout 【发布时间】:2019-10-05 15:55:41 【问题描述】:

我想显示 9 张图片。我希望布局是 3 x 3。

问题是第一行的前 3 张图片占据了屏幕尺寸的三分之二。

我尝试在垂直线性布局中添加嵌套的水平线性布局,每个水平线性布局的 wightsum = 3, 1。我还添加了 app:layout_heightPercent="25%" app:layout_widthPercent="25%" 并没有改变。

<?xml version="1.0" encoding="utf-8"?>
<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_
    android:layout_
    tools:context=".MainActivity"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:weightSum="3"
    android:orientation="vertical">


    <LinearLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:weightSum="3"
        android:orientation="horizontal">


        <ImageButton
            android:id="@+id/image11"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:background="@drawable/image1"
            android:padding="10dp"
            android:scaleType="fitXY"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%"/>

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image2"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image3"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />
    </LinearLayout>


    <LinearLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:weightSum="3">


        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image4"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image5"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/ima6"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />
    </LinearLayout>
<LinearLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:weightSum="3">


        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image7"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image8"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />

        <ImageButton
            android:layout_
            android:layout_
            android:background="@drawable/image1"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:padding="10dp"
            android:scaleType="fitXY"
            android:id="@+id/image9"
            android:layout_gravity="center"
            app:layout_heightPercent="25%"
            app:layout_widthPercent="25%" />
    </LinearLayout>

</LinearLayout>

【问题讨论】:

可以拍出你想要的照片吗?你的图片最终应该是什么样子? 这里是横向布局的 3x3 图片的链接:drive.google.com/file/d/1P55zdfZeoqpABPxI5i1cynrHI9F_ST1Z/… 如果这张照片是你想要的,你的代码已经可以工作了!图片中的行和列占您提到的 33% 而不是 25%! 【参考方案1】:

如果您只想获取宽度和高度按钮,您可以通过此函数设置布局按钮的高度和宽度

 private fun calculateImageSize() 
        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val displayMetrics = DisplayMetrics()
        windowManager.defaultDisplay.getMetrics(displayMetrics)
        var width = displayMetrics.widthPixels
        //div 3 because want screen (3*3) if u want 25% you can change 4 (25+25+25+25)
        var realWitdh = width / 3 
        var mWidthMenu = realWitdh
        var mHeightMenu = realWidth
    

【讨论】:

以上是关于如何在嵌套线性布局中使 imageButton 的高度占屏幕尺寸的 25%。 Android XML 横向布局的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套线性布局中将按钮与屏幕底部对齐[重复]

如何在Android中将imageButton设置为子视图(webview)的左上角

android,线性布局1,里面嵌套线性布局2(垂直排列),想让2在1里是垂直居中的,怎么搞?

Android:具有不同alpha值的嵌套线性布局

如何在 android 上使用代码定位特定布局?

如何在约束布局 1.0 中使视图居中