我使用以下代码在代码中动态更改视图的宽度:
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>
答案 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
正常工作。
希望这对你有用!