Android:按下按钮状态时按钮填充更改

时间:2014-05-09 09:52:21

标签: android button

我希望创建一个按钮,当按下按钮时会改变尺寸(稍微小一点),再次释放按钮后,尺寸应该会变回正常尺寸。

我找到了一个很好的按钮的xml选择器,当按下它时会改变颜色。 我试图改变你在xml上看到的填充,但是它没有用。

为什么它不起作用?我怎么能这样做?

我还尝试使ButtonLinearLayoutButton包含时<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" android:orientation="horizontal" android:weightSum="1" > <Button android:id="@+id/cancel_button" style="@style/ButtonText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/purplebutton" android:text="@string/done_button" android:layout_weight ="0.5"/> <Button android:id="@+id/done_button" style="@style/ButtonText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/yellowbutton" android:text="@string/done_button" android:layout_weight ="0.5"/> </LinearLayout> 无效。

我膨胀的布局:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#a276eb" />
            <stroke
                android:width="1dp"
                android:color="#6a3ab2" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="5dp"
                android:top="5dp"
                android:right="5dp"
                android:bottom="5dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#a276eb"
                android:endColor="#6a3ab2"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#6a3ab2" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>  

purplebutton.xml:

{{1}}

8 个答案:

答案 0 :(得分:1)

填充实际上给出了按钮内的指定空间。所以它不会总是改变按钮的大小。更好地为正常和按压状态指定不同的宽度和高度。

答案 1 :(得分:1)

// try this way,hope this will help you...

put "button_selector.xml" under "drawable" folder
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/buttonhoverimage" android:state_pressed="true"></item>
    <item android:drawable="@drawable/buttonhoverimage" android:state_focused="true"></item>
    <item android:drawable="@drawable/buttonnormalimage" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item>
    <item android:drawable="@drawable/buttonhoverimage" android:state_enabled="false"></item>

</selector>

try to use button selector this way
button.setBackgroundResource(R.drawable.button_selector);

答案 2 :(得分:1)

尝试以编程方式执行,...

mControls.UpButton.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                        FrameLayout fl = new FrameLayout(context);
                        Button b = new Button(context);
                        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, height);
                        params.setMargins(top, left, bottom, right);
                       fl.addView(b,params);
                    break;
                case MotionEvent.ACTION_UP:
                        FrameLayout fl = new FrameLayout(context);
                        Button b = new Button(context);
                        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, height);
                        params.setMargins(top, left, bottom, right);
                        fl.addView(b,params);
                    break;
                }
                return false;

            }           
        });

答案 3 :(得分:0)

在单击按钮的方法中,您可以使用按钮方法以编程方式更改填充和所需内容。

答案 4 :(得分:0)

您无法通过xml选择器更改大小或填充,您可以通过onClick方法上的java代码执行此操作。

答案 5 :(得分:0)

这个适用于调整大小按钮。

但是在我的linearLayout中,我有2个这样的按钮,每按一次,linearLayout会计算其他按钮的宽度。这意味着另一个按钮会稍微改变大小。看起来很奇怪。

我想要的是我有两个按钮彼此相邻,当我按下那个按钮时应该改变尺寸。

有什么想法吗?

这里我如何设置填充:

int size1 = btnLayout.getChildCount();
for (int i = 0; i < size1; i++) {
    if (btnLayout.getChildAt(i) instanceof View) {
            final Button mybutton1;
            final Button mybutton2;
            View myView = btnLayout.getChildAt(i);
            if (myView.getId() == id.cancel_button) {
                // cancel button
                mybutton1 = (Button)  btnLayout.getChildAt(i);
                mybutton1.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();
                        if (action == MotionEvent.ACTION_DOWN) {
                            mybutton1.setPadding(20, 20, 20, 20);

                        } else if (action == MotionEvent.ACTION_UP) {
                            mybutton1.setPadding(10, 10, 10, 10);
                        }
                        return false;
                    }
                });

            } else if (myView.getId() == id.done_button) {
                // done button
                mybutton2 = (Button)  btnLayout.getChildAt(i);
                mybutton2.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();

                        if (action == MotionEvent.ACTION_DOWN) {
                            mybutton2.setPadding(20, 20, 20, 20);

                        } else if (action == MotionEvent.ACTION_UP) {
                            mybutton2.setPadding(10, 10, 10, 10);
                        }
                        return false;
                    }

                });
            }
    }   



    }

答案 6 :(得分:0)

使用android:variablePadding as described here

布尔值。 &#34;真&#34;如果可绘制的填充应根据所选的当前状态而改变; &#34;假&#34;如果填充应保持不变(基于所有状态的最大填充)。启用此功能需要您在状态更改时处理执行布局,这通常不受支持。默认为false。

答案 7 :(得分:0)

这是你想要的: -

Your_Button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(Your_Button,
                            "scaleX", 0.8f);
                    ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(Your_Button,
                            "scaleY", 0.8f);
                    scaleDownX.setDuration(1000);
                    scaleDownY.setDuration(1000);

                    AnimatorSet scaleDown = new AnimatorSet();
                    scaleDown.play(scaleDownX).with(scaleDownY);

                    scaleDown.start();


                    break;

                case MotionEvent.ACTION_UP:
                    ObjectAnimator scaleDownX2 = ObjectAnimator.ofFloat(
                            Your_Button, "scaleX", 1f);
                    ObjectAnimator scaleDownY2 = ObjectAnimator.ofFloat(
                            Your_Button, "scaleY", 1f);
                    scaleDownX2.setDuration(1000);
                    scaleDownY2.setDuration(1000);

                    AnimatorSet scaleDown2 = new AnimatorSet();
                    scaleDown2.play(scaleDownX2).with(scaleDownY2);

                    scaleDown2.start();


                    break;
                }
                return true;
            }
        });

这里你需要在xml中做什么: -

&#13;
&#13;
<Button
        android:id="@+id/done_button"
        style="@style/ButtonText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleX="1"
        android:scaleY="1"
        android:background="@drawable/yellowbutton"
        android:text="@string/done_button"
        android:layout_weight ="0.5"/>
&#13;
&#13;
&#13;

使用 scaleDown.play(scaleDownX).with(scaleDownY),它将保持动画位置,不会将其恢复原状

希望它解决你的问题欢呼