android:将drawableTop图标设置在其原始位置

时间:2013-10-05 11:31:42

标签: android button layout

我在应用程序中有一个调用某个功能的按钮,在此之前,系统将检查该特定功能是否可用,如果没有,它将实现以下功能:

XML:

    <Button
        android:id="@+id/button_speak"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="1dp"
        android:layout_weight="1"
        android:background="@drawable/purple_btn"
        android:drawableTop="@drawable/icon_headphones_btn"
        android:gravity="center"
        android:padding="15dp"
        android:text="Listen!"
        android:textColor="@color/black"
        android:textSize="20dp"
        android:textStyle="bold" />

代码:

                speakBtn.setEnabled(false);  
                speakBtn.setText("Speak NOT\nSUPPORTED");
                speakBtn.setBackgroundResource(R.drawable.grey_btn);
                speakBtn.setTextSize(12);

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
                params.weight = 1;
                speakBtn.setLayoutParams(params);
                speakBtn.setGravity(Gravity.CENTER);

展望:

enter image description here按钮:已启用

enter image description here按钮:已禁用(措辞应为Listen not supported ...)

问题:

按钮被禁用后,使用.setBakgroundResource更改按钮的背景,然后按钮可以更改其背景资源,但图标会上升!

如何将图标设置为原来的位置,只是背景和按钮上的文字被更改? (至少图标不会到达按钮的顶部)

谢谢!

1 个答案:

答案 0 :(得分:0)

不确定,但我的赌注是在设置新padding时可能会删除LayoutParams值。您可以通过注释掉这一行来轻松检查.-

speakBtn.setLayoutParams(params);

如果有效,您可以尝试在该行之后手动设置填充.-

speakBtn.setPadding(0, 15, 0, 0);

顺便提一下,请记住,应将dimension值保存在维度资源文件中(即dimens.xml