调整按钮大小的问题

时间:2018-07-02 04:31:56

标签: android parameters alignment

首先,让我描述一下我要完成的一般想法。我有一组4个数字,它们代表不同的统计数据,我希望在我的UI中以条形图显示这些数据。单击2条,应交换数字值并相应调整条的大小。我认为将这些条形实现为按钮是有意义的,将它们设置为相同的宽度和高度以匹配其值,然后根据需要更改其高度以匹配新的值。但是我遇到了问题。

1)可以说,我无法使条形/按钮在视图组的底部对齐-位于图的x轴上。我尝试使用RelativeLayout和FrameLayout设置gravity =“ bottom”,但是按钮都彼此对齐,就像上下颠倒的条形图一样。 LinearLayout将它们全部排列在中间-似乎无法改变它。我尝试了[此帖子的建议] [1],但没有成功。我最终使用了一个约束组,并将它们约束到最底端,并且彼此之间相互约束,这种约束最初是可行的,但是在调整按钮的大小时就中断了,这将导致下一个问题。

2)调整按钮大小时,我一直遇到问题。首先,我尝试了不执行任何操作的mButton.setHeight()。然后,我读到我应该制作一个LayoutParams对象,并使用该对象,该对象确实发生了变化,但大小没有改变,但是确实发生了变化。同样,调整按钮的大小似乎打破了限制。我尝试过回到LinearLayout,但是现在我崩溃了。

我想第三个问题可能是,我只是想解决这个错误?我不应该这样尝试使用按钮吗?感谢您提供的所有帮助。

这是xml的剪辑。为简便起见,我只是发布单个按钮的代码,而不是四个相同的块。 (我读过的最后一句话是,建议将具有不同高度的按钮无法对齐,并建议将每个按钮包装在一个视图组中以将其隔离,但无法正常工作)

 <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="bottom">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom">
                <Button
                    android:id="@+id/butt_attack"
                    android:layout_width="20dp"
                    android:layout_height="70dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginStart="5dp"
                    android:background="@color/YellowHigh"
                    android:text="7"
                    android:textSize="10sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent" />
            </RelativeLayout>

来自活动Java文件

    mReadySwap = false; //Used to signify if one of the buttons has already been pressed
        mAttackButt = (Button)findViewById(R.id.butt_attack);
        mSleazeButt = (Button)findViewById(R.id.butt_sleaze);
        mDataProcButt = (Button)findViewById(R.id.butt_dataproc);
        mFirewallButt = (Button)findViewById(R.id.butt_firewall);

        mAttackButt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!mReadySwap){ //note the first button to be pressed and copy necessary values
                    mButt1 = mAttackButt;
                    mHeight1 = mAttackButt.getHeight();
                    mAttNum1 = mAttackButt.getText().toString();
                    mReadySwap = true;
                }else{ //make the swap
                    mButt1.setLayoutParams(new LinearLayout.LayoutParams(20, mAttackButt.getHeight()));
//                    mButt1.setHeight(mAttackButt.getHeight());
                    mButt1.setText(mAttackButt.getText());
                    mAttackButt.setLayoutParams(new LinearLayout.LayoutParams(20, mHeight1));
//                    mAttackButt.setHeight(mHeight1);
                    mAttackButt.setText(mAttNum1);
                    mReadySwap = false;
                }
            }
        });

0 个答案:

没有答案