why is my layout_weight not working?

2020-05-09 09:31发布

问题:

I have this xml file.I can't understand why my second linearlayout which contains editText and callButton isn't looking right. It looks like this (the line with the part picture of phone) :

I have the layout_weights set to 1 in each of these views, editText and callButton, so the phone image should take up half the screen, right? Here's my code. I would like both views to take up the same width - and the editText shouldn't stretch when text is entered, as is currently happening. Thanks for any help.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/ListView_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_weight="1">
    </ListView>

<LinearLayout
    android:id="@+id/LinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        >
        <!--android:adjustViewBounds="true"-->
    <!-- we want the text to begin in the centre of the edittext view
    that's what gravity does-->

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/editText"
        android:inputType="phone"
        android:gravity="center"
        android:background="#d9d9d9"
        android:layout_weight="1"

        />


        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/callButton"
            android:src="@drawable/call"
            android:clickable="true"
            android:onClick="softkeyboardButton"
            android:background="#ffa62b"
            android:layout_weight="1"

            />
</LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal" >

    <CheckBox
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:background="#ffa500"
        android:text="New CheckBox"
        android:id="@+id/checkBox"
        android:layout_weight="4"
        />


        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:id="@+id/imageButton"
            android:src="@drawable/softkeyboard"
            android:clickable="true"
            android:onClick="softkeyboardButton"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:background="@drawable/buttonstates"
             />

        <View android:layout_height="fill_parent"
            android:layout_width="2px"
            android:background="#90909090"/>

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:id="@+id/imageButton2"
            android:src="@drawable/settingsicon"
            android:background="@drawable/buttonstates"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1" />

    </LinearLayout>

    </LinearLayout>

回答1:

Change your EditText and Call button with layout_width to "0dp" -

<EditText

android:layout_width="0dp"

        android:layout_height="match_parent"
        android:id="@+id/editText"
        android:inputType="phone"
        android:gravity="center"
        android:background="#d9d9d9"
        android:layout_weight="1"

        />


        <ImageButton

android:layout_width="0dp"

            android:layout_height="match_parent"
            android:id="@+id/callButton"
            android:src="@drawable/call"
            android:clickable="true"
            android:onClick="softkeyboardButton"
            android:background="#ffa62b"
            android:layout_weight="1"

            />


回答2:

Try setting the layout_width of the EditText and the ImageButton to 0dp. I also recommend you to put the attribute android:scaleType="fitCenter" in the ImageButton so that the image fits inside the button and it doesn't look bigger like in the screenshot you provided.

Here is the XML file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/ListView_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_weight="1">
    </ListView>

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        >
        <!--android:adjustViewBounds="true"-->
        <!-- we want the text to begin in the centre of the edittext view
        that's what gravity does-->

        <EditText
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:id="@+id/editText"
            android:inputType="phone"
            android:gravity="center"
            android:hint="Edit Text"
            android:background="#d9d9d9"
            android:layout_weight="1"

            />


        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:id="@+id/callButton"
            android:src="@android:drawable/sym_call_incoming"
            android:clickable="true"
            android:scaleType="fitCenter"
            android:onClick="softkeyboardButton"
            android:background="#ffa62b"
            android:layout_weight="1"

            />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal" >

        <CheckBox
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:background="#ffa500"
            android:text="New CheckBox"
            android:id="@+id/checkBox"
            android:layout_weight="4"
            />


        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:id="@+id/imageButton"
            android:src="@android:drawable/ic_menu_gallery"
            android:clickable="true"
            android:onClick="softkeyboardButton"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:background="@android:drawable/ic_menu_gallery"
            />

        <View android:layout_height="fill_parent"
            android:layout_width="2px"
            android:background="#90909090"/>

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:id="@+id/imageButton2"
            android:src="@android:drawable/ic_menu_set_as"
            android:background="@android:drawable/ic_menu_gallery"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1" />

    </LinearLayout>

</LinearLayout>

And this is how it looks:

I hope it helps!



回答3:

For layout_weight to work, you should set either the layout_height or layout_weight to be 0dp on the widgets with weight.

From the looks of things I think you should spend some more time looking into how layout_weight works exactly

https://developer.android.com/guide/topics/ui/layout/linear.html#Weight