float_和decimal中的layout_weight

时间:2016-03-16 00:08:00

标签: android android-layout

我使用以下代码在代码中动态更改视图的宽度:

            final ImageButton ButtonTwo = (ImageButton)findViewById(R.id.callButton);

            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) ButtonTwo.getLayoutParams();
            params.weight = 1.3f;
            ButtonTwo.setLayoutParams(params);

这个想法是它匹配XML中的另一个视图:

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

它们的宽度不同 - 第一个按钮比第二个按钮宽。我知道这是因为一个是浮点数,一个是十进制数,但是如何使它们都是十进制大小,或者我应该对浮点值进行试验和错误?我的params.weight只接受浮点值。

修改 这是我的XML代码:

<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="wrap_content"
        android:layout_weight="1">
    </ListView>
<!--Let's set the height of the linearlayout below to 0dp. Apparently it's less work on resources,
as otherwise we would be drawing it twice, because the size is also set dynamically-->
<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:background="#d9d9d9"
        android:layout_weight="4"

        />


        <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="2"

            />
</LinearLayout>

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

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


        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:id="@+id/imageButton"
            android:src="@drawable/softkeyboard"
            android:clickable="true"
            android:onClick="softkeyboardButton"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1.3"
            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="0dp"
            android:id="@+id/imageButton2"
            android:src="@drawable/settingsicon"
            android:background="@drawable/buttonstates"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1.3" />

    </LinearLayout>

    </LinearLayout>

2 个答案:

答案 0 :(得分:1)

按照建议发布此答案。 :)

如果想让它们与LayoutParams匹配,为什么不只是检索xml中指示的LayoutParams的{​​{1}},然后将其设置为ImageButton你动态想要的LayoutParams?像这样:

ImageButton

并引用@Christophe Harris给其他用户:

  

我在浮动时遇到了可怕的麻烦 - params.weight = 1.3f。尽管我使用的是setLayoutParams = getLayoutParams,但宽度从未完全相同。可能与花车有关的东西永远不准确,我不知道。但后来我将它改为params.width = 80,这是确切的。

答案 1 :(得分:0)

您需要将layout_width设置为"0dp" ButtonTwo 才能使layout_weight正常工作。

希望这对你有用!