避免布局调整大小

时间:2015-03-20 04:32:54

标签: android android-linearlayout

这是我的activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:background="#ffffff" >

        <ImageView
            android:id="@id/imgLogo"
            android:layout_width="100dp"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:src="@drawable/logo" />

        <TextView
            android:id="@id/txtCurScore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerInParent="true"
            android:textColor="#000000"
            android:textSize="28sp"
            android:textStyle="bold" />

        <Button
            android:id="@id/btnTopScore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="@string/strBtnTopScore"
            android:textColor="#000000"
            android:textStyle="bold" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0px"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button4"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0px"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button5"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button6"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button7"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button8"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0px"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button9"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button10"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button11"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button12"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0px"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button13"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button14"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button15"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />

            <Button
                android:id="@+id/button16"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

上面的布局有4x4按钮和图像(图像中添加了图像)。当用户按下按钮时,当2个连续按钮具有相同的图像时,我通过调用setVisibility(View.GONE)使这两个按钮不可见。

但是我遇到了这种方法的问题:每当按钮设置为不可见时,布局会自行调整大小。例如,如果按钮[0] [0]设置为不可见,则第一行中的其余3个按钮将被按下。因此按钮[0] [1]现在将占据按钮[0] [0]的位置。按钮[0] [2]将占据按钮[0] [1]的位置,按钮[0] [3]将占据按钮[0] [2]的位置。

请建议一种方法,以避免在布局中左侧的任何元素在线性布局中不可见时按钮移动到左侧。

我尝试修改了一堆属性,并在线搜索。但我无法找到解决这个问题的具体方法。请提出解决此问题的方法。

5 个答案:

答案 0 :(得分:1)

使用

View.INVISIBLE

而不是

View.GONE

答案 1 :(得分:0)

来自文档view

int INVISIBLE这个视图是不可见的,但它仍然占用了用于布局的空间。

int GONE此视图不可见,并且不会占用任何空间用于布局。

答案 2 :(得分:0)

选项1: 请使用View.INVISIBLE而不是View.GONE

上述两者之间存在特殊差异:

  

不可见:

This view is invisible, but it still takes up space for layout purposes.
     

GONE:

This view is invisible, and it doesn't take any space for layout purposes.

因此,通过使用View.INVISIBLE,按钮[0] [0]的空间将保留在视图层次结构中,因此按钮[0] [1],按钮[0] [2]和按钮

选项2: 当用户点击任何按钮时,我们可以动态地使用java文件

我正在给出逻辑步骤:

  

- &GT;用户单击按钮[0] [0]

     

- &GT;按钮[0] [0]的click监听器从Framework

获得回调      

- &GT;在某个变量中保存父布局的宽度,即parentWidth和按钮之间的间隙i / e / gap

     

- &GT;将宽度等于((parentWidth / 3) - (2 * gap))到按钮[0] [1],按钮[0] [2]和按钮[0] [3]

这样你的所有三个按钮都会得到相等的宽度

答案 3 :(得分:0)

根据问题,你似乎已经为任何视图使用了setVisibility(View.GONE),所以基本上GONE和INVISIBLE之间的区别是GONE会隐藏元素并释放布局空间,而INVISIBLE只会隐藏元素但是它不会释放在记忆中占据的空间。

所以在你的情况下因为view.gone它提供了留空按钮的空间,那些按钮变得更宽或位置不匹配,所以请通过仔细了解使用来使用GONE和INVISIBLE

答案 4 :(得分:0)

您好以上所有建议使用按钮的setVisibility(View.INVISBLE)属性。 我查看了我修改过的布局,让我们尝试下面的布局代码。我相信你会帮助你。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:background="#ffffff" >

    <ImageView
        android:id="@+id/imgLogo"
        android:layout_width="100dp"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:src="@drawable/logo" />

    <TextView
        android:id="@+id/txtCurScore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerInParent="true"
        android:textColor="#000000"
        android:textSize="28sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnTopScore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="TopScore"
        android:textColor="#000000"
        android:textStyle="bold" />
</RelativeLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:gravity="center" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:gravity="center" >

        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button6"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button8"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:gravity="center" >

        <Button
            android:id="@+id/button9"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button10"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button11"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button12"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:gravity="center" >

        <Button
            android:id="@+id/button13"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button14"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button15"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button16"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </LinearLayout>
</LinearLayout>

我在布局中做了哪些修改,每一行应该匹配父代而不是换行内容,使LinearLayout的组件 android:gravity = center 。现在,当您尝试从代码中隐藏按钮时,它只会隐藏按钮而不是从布局中完全删除。我希望能帮助:)。