有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当尝试使用ConstraintLayout将java视图添加到同一行时,java视图会被截断

我试图创建自己的多按钮“自定义视图”,从xml文件中获取属性。 当尝试创建包含3个以上按钮的自定义视图时,某些按钮会被截断(请参见随附的屏幕截图)。 可能有人遇到了这样的问题(可能是与错误使用ConstraintLayout“打包链”样式有关的问题)。 请注意,我有一个名为“reversedOrder”的布尔参数,以支持一些从RTL编写的语言 我的编程代码是:

  public class MultiButton extends ConstraintLayout
{
    public static final int MAX_NUMBER_OF_BUTTONS = 5;
    @StyleableRes
    private int indexNumOfButtons = 0;

    @StyleableRes
    private int indexOfOrder = 1;

    @StyleableRes
    private int indexOfActiveButtonIndex = 2;

    @StyleableRes
    private int indexOfBackgroundSelectorResource = 3;

    @StyleableRes
    private int indexOfTextcolorSelectorResource = 4;

    private int numOfButtons;
    private int activeButtonIndex;


    private boolean reversedOrder;

    private Button[] allButtons;
    private View.OnClickListener[] additionalOnClickListeners;


    public MultiButton(Context context, AttributeSet attrs )
    {
        super(context,attrs);
        init(context,attrs);
    }

    private void init(Context context, AttributeSet attrs)
    {
        int[] sets = {R.attr.numOfButtons, R.attr.reversedOrder, R.attr.activeButtonIndex,R.attr.backgroundSelector,R.attr.textColorSelector};
        TypedArray typedArray = context.obtainStyledAttributes(attrs, sets);
        numOfButtons = typedArray.getInt(indexNumOfButtons,1);

        if (numOfButtons < 0)
        {
            numOfButtons = 1;
        }
        else if (numOfButtons > MAX_NUMBER_OF_BUTTONS)
        {
            numOfButtons = MAX_NUMBER_OF_BUTTONS;
        }

        allButtons = new Button[numOfButtons];
        int height = getHeight();
        for (int i =0; i<numOfButtons; i++)
        {
            allButtons[i] = new Button(context);
            allButtons[i].setText("" +i);
            allButtons[i].setHeight(height);
            allButtons[i].setWidth(0);
        }

        additionalOnClickListeners = new View.OnClickListener[numOfButtons];

        int backgroundSelectorResourceId = typedArray.getResourceId(indexOfBackgroundSelectorResource,0); //context.getResources().getDrawable(R.drawable.btn);
        int textColorSelectorResourceId = typedArray.getResourceId(indexOfTextcolorSelectorResource,0);

        reversedOrder = typedArray.getBoolean(indexOfOrder,false);
        for (int i=0; i< numOfButtons;  i++)
        {
            int currentIndex = reversedOrder ?  (numOfButtons-i-1) : i;
            allButtons[currentIndex].setId(generateViewId());
            addView(allButtons[currentIndex]);

            if (backgroundSelectorResourceId != 0) {
                Drawable buttonDrawable = context.getResources().getDrawable(backgroundSelectorResourceId);
                if (buttonDrawable != null) {
                    buttonDrawable.mutate();
                    allButtons[currentIndex].setBackground(buttonDrawable);
                }
            }

            if (textColorSelectorResourceId != 0)
            {
                ColorStateList colorStateList = context.getResources().getColorStateList(textColorSelectorResourceId);
                if (colorStateList !=null) {
                    allButtons[currentIndex].setTextColor(colorStateList);
                }
            }

            allButtons[currentIndex].setOnClickListener(new DefaultButtonListener(currentIndex));
        }

        ConstraintSet set = new ConstraintSet();
        set.clone(this);
        int[] chainIds = new int[numOfButtons];
        float[] chainWeights = new float[numOfButtons];
        for (int i=0; i<numOfButtons; i++)
        {
            int currentIndex = reversedOrder ?  (numOfButtons-i-1) : i;
            chainIds[currentIndex] = allButtons[currentIndex].getId();
            chainWeights[currentIndex] = 1;
        }
        for  (int i=1; i< numOfButtons ; i++)
        {
            if (reversedOrder)
            {
                set.connect(allButtons[i - 1].getId(), ConstraintSet.LEFT, allButtons[i].getId(), ConstraintSet.RIGHT);
            }
            else
            {
                set.connect(allButtons[i-1].getId(), ConstraintSet.RIGHT, allButtons[i].getId(),ConstraintSet.LEFT);
            }
        }

        if (reversedOrder)
        {
            set.connect(allButtons[0].getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT);
            set.connect(allButtons[numOfButtons-1].getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT);
        }

        else
        {
            set.connect(allButtons[0].getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT);
            set.connect(allButtons[numOfButtons-1].getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT);
        }

        set.createHorizontalChain(ConstraintSet.PARENT_ID,ConstraintSet.LEFT, ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,chainIds,chainWeights,ConstraintSet.CHAIN_PACKED);
        set.applyTo(this);


        activeButtonIndex = typedArray.getInt(indexOfActiveButtonIndex,0);
        if (activeButtonIndex < 0 && activeButtonIndex > MAX_NUMBER_OF_BUTTONS -1)
        {
            activeButtonIndex = 0;
        }
        allButtons[activeButtonIndex].setSelected(true);
    }
}

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<安卓x.constraintlayout.widget.ConstraintLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        安卓:id="@+id/helloWorld"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.example.customviewapp.MultiButton
        安卓:layout_width="300dp"
        安卓:layout_height="50dp"
        app:layout_constraintTop_toBottomOf="@id/helloWorld"
        安卓:layout_marginTop="15dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:numOfButtons="4"
        app:activeButtonIndex="0"
        />

</安卓x.constraintlayout.widget.ConstraintLayout>

Truncated Buttons


共 (0) 个答案