【问题标题】:Unable to scroll extended Relative Layout class horizontally无法水平滚动扩展的相对布局类
【发布时间】:2019-12-03 08:15:22
【问题描述】:

我无法水平滚动视图。 代码:

public class MatchTheFollowingAttempted extends RelativeLayout {

private Context mContext;

int numberOfOneSideButtons = 5;


public MatchTheFollowingAttempted(Context context) {
    super(context);
    mContext = context;
    initialiseView();
}

public MatchTheFollowingAttempted(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    initialiseView();
}

public MatchTheFollowingAttempted(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mContext = context;
    initialiseView();
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MatchTheFollowingAttempted(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    mContext = context;
    initialiseView();
}

public void initialiseView() {

    ArrayList<Button> leftSideButtons = new ArrayList<>();
    ArrayList<Button> rightSideButtons = new ArrayList<>();
   ArrayList<Button> rightSideButtons2 = new ArrayList<>();
    ArrayList<Button> rightSideButtons3 = new ArrayList<>();

    ArrayList<MatchTheColumnDrawView> matchTheColumnDrawViewArrayList = new ArrayList<>();
    ArrayList<MatchTheColumnDrawView> matchTheColumnDrawViewArrayList1 = new ArrayList<>();

    ScrollView sv = new ScrollView(mContext);

    for (int i = 0; i < numberOfOneSideButtons; i++) {

        Button mButton = new Button(mContext);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mButton.setId(View.generateViewId());
        }

        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        if (i != 0) {

            layoutParams.addRule(BELOW, leftSideButtons.get(i-1).getId());

        }

       // layoutParams.setMargins(10, 0, 10, 0);

        mButton.setLayoutParams(layoutParams);
        mButton.setText("Test"+i);

        leftSideButtons.add(mButton);

        addView(mButton);
        sv.setLayoutParams(layoutParams);
    }



    for (int i = 0; i < numberOfOneSideButtons; i++) {

        Button mButton = new Button(mContext);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mButton.setId(View.generateViewId());
        }

        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        layoutParams.addRule(RIGHT_OF,leftSideButtons.get(i).getId());

        if (i != 0) {

            layoutParams.addRule(BELOW, rightSideButtons.get(i-1).getId());

        }

        layoutParams.setMargins(10, 0, 10, 0);

        mButton.setLayoutParams(layoutParams);
        mButton.setText("Test"+(4-i));

        rightSideButtons.add(mButton);

        addView(mButton);
        sv.setLayoutParams(layoutParams);
    }

    for (int i = 0; i < numberOfOneSideButtons; i++) {

        Button mButton = new Button(mContext);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mButton.setId(View.generateViewId());
        }

        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.addRule(RIGHT_OF,rightSideButtons.get(i).getId());
        if (i != 0) {

            layoutParams.addRule(BELOW, leftSideButtons.get(i-1).getId());

        }

        layoutParams.setMargins(10, 0, 10, 0);

        mButton.setLayoutParams(layoutParams);
        // mButton.setText("Test"+i);

        rightSideButtons2.add(mButton);

        addView(mButton);

        sv.setLayoutParams(layoutParams);
    }

    for (int i = 0; i < numberOfOneSideButtons; i++) {

        Button mButton = new Button(mContext);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mButton.setId(View.generateViewId());
        }

        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.addRule(ALIGN_PARENT_RIGHT);
        if (i != 0) {

            layoutParams.addRule(BELOW, leftSideButtons.get(i-1).getId());

        }

        layoutParams.setMargins(10, 0, 10, 0);

        mButton.setLayoutParams(layoutParams);
        // mButton.setText("Test"+i);

        rightSideButtons3.add(mButton);

        addView(mButton);

        sv.setLayoutParams(layoutParams);
    }

    for (int i = 0; i < numberOfOneSideButtons; i++) {

        MatchTheColumnDrawView matchTheColumnDrawView = new MatchTheColumnDrawView(mContext, leftSideButtons.get(i), rightSideButtons.get(4-i), "#000000", null, 4.0f, MatchTheColumnDrawView.LEFT_TO_RIGHT);

        matchTheColumnDrawViewArrayList.add(matchTheColumnDrawView);

        addView(matchTheColumnDrawView);

        MatchTheColumnDrawView matchTheColumnDrawView2 = new MatchTheColumnDrawView(mContext, rightSideButtons.get(i), rightSideButtons2.get(4-i), "#000000", null, 4.0f, MatchTheColumnDrawView.LEFT_TO_RIGHT);

        matchTheColumnDrawViewArrayList1.add(matchTheColumnDrawView2);

        addView(matchTheColumnDrawView2);
    }



}

}

以上是我的代码,请同时检查我的 XML 文件。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

            <com.gma.chtfeature.MatchTheFollowingAttempted
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/match">

            </com.gma.chtfeature.MatchTheFollowingAttempted>


    </ScrollView>


</RelativeLayout>

这里的左侧按钮,右侧按钮等的arraylist,需要动态添加按钮,需要水平滚动。请帮帮我。它应该画一条线来匹配每一行旁边的按钮,就像这样。 提前致谢。

【问题讨论】:

    标签: android canvas scrollview android-relativelayout


    【解决方案1】:

    使用HorizontalScrollView 代替ScrollView 进行水平滚动。 或者您可以使用RecyclerViewLayoutManagerOrientation.HORIZONTAL

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多