有 Java 编程相关的问题?

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

java动态添加按钮以滚动查看安卓

所以我想在安卓的布局中添加x个数量的按钮(x通常在4到24之间),我可以使用下面的代码实现这一点,但它不会滚动,所以它会切断一些按钮

我正在使用一个片段,它包含一个LinearLayoutBottomNavigation,其中一个导航选项指向下面包含的片段

此刻我的心在跳动。xml文件看起来像:

<ScrollView
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent">

    <LinearLayout
        安卓:id="@+id/units_group"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent"
        安卓:layout_centerHorizontal="true"
        安卓:layout_marginEnd="20dp"
        安卓:layout_marginStart="20dp"
        安卓:layout_marginTop="20dp"
        安卓:orientation="vertical">

    </LinearLayout>

</ScrollView>

我的代码是:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_course_units, container, false);

    final LinearLayout unitsBtns = (LinearLayout) view.findViewById(R.id.units_group);

    //I actually get this from a volley request but didn't want to include all the code
    String[] units = {"1", "2", "3", "4", "5", "6", "7", "8"}; 

    for(int i = 0; i < units.length; i++){
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );

        params.setMargins(0, 30, 0, 0);
        Button b = new Button(getActivity());

        b.setLayoutParams(params);
        b.setText(units[i]);
        b.setId(i);
        b.setBackgroundColor(Color.WHITE);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    // STUFF HERE
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        unitsBtns.addView(b);
    }

    return view;
}

有没有办法让按钮可以滚动?我也试着把scrollView放在它的父对象周围,但它似乎仍然不起作用

注意:我对开发原生Android应用程序还很陌生,所以如果我做得不对,请纠正我


共 (2) 个答案

  1. # 1 楼答案

    当您必须使用ScrollView时,您应该在ScrollView的子视图中提供android:layout\u height=“wrap\u content”,然后只需滚动视图

    您应该像这样使用用户LinearLayout

    <LinearLayout
            android:id="@+id/units_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginEnd="20dp"
            android:layout_marginStart="20dp"
            android:layout_marginTop="20dp"
            android:orientation="vertical">
    
        </LinearLayout>
    

    这里也有你要更换的

      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
    

    注意:当您在高度属性中指定match_parent时,它会将您的视图限制在设备屏幕上

    希望它能帮助你……)

  2. # 2 楼答案

    下面是一个工作示例(水平):

    <HorizontalScrollView
            android:id="@+id/hsv1"
            android:scrollbars="none"
            android:background="#0d47a1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <LinearLayout
                android:id="@+id/hsvLayout1"
                android:background="#0d47a1"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </LinearLayout>
    </HorizontalScrollView>
    

    获取滚动视图和布局:

    HorizontalScrollView hsv1 = (HorizontalScrollView) findViewById( R.id.hsv1 );
    LinearLayout layout = (LinearLayout) hsv1.findViewById( R.id.hsvLayout1 );
    layout.removeAllViews();
    

    动态创建按钮:

    Button myButton = new Button (this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT );
    lp.setMargins( 20, 0, 20, 0 );
    myButton.setLayoutParams(lp);
    myButton.setTextColor( Color.YELLOW );
    myButton.setGravity( Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL );
    myButton.setText( "Hello World !" );
    

    将按钮添加到布局:

    layout.addView(myButton);