How to split Linear Layout in to two columns?

后端 未结 3 389
青春惊慌失措
青春惊慌失措 2020-12-31 11:04

I have to split a Single Linear layout into a Two Columns(Like newspaper Columns).The linear layout contain text-view and image-vie

相关标签:
3条回答
  • 2020-12-31 11:17

    You can't do it with GridView. You would have to create a custom view to do this.

    if you know how big your grid items are, you can cut some corners. GridView is complicated mostly because it deals with items of any size and loads them dynamically. An easier way for you might be:

    1.Create a HorizontalScrollView with a horizontal LinearLayout inside.

    2.Determining how many rows of your item will fit on the screen. Call this rows.

    3.while you still have items you need to layout:

        1.Create a vertical LinearLayout, adding rows or less items to it.
        2.Add your new vertical LinearLayout to the horizontal one.
    

    There are some downsides versus what a "horizontal GridView" would get you:

    1.All the views are loaded up immediately, which is bad for huge lists of items.
    2.You need to know how big your items are, and they need to be the same size.
    

    Upsides:

    1.It's very easy to implement.
    

    for more inf plz see this link

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        ScrollView scrollView = new ScrollView(this);//ScrollView
        LinearLayout ll = new LinearLayout(this); //root LinearLayout
        ll.setOrientation(LinearLayout.HORIZONTAL);//with horizontal orientation
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT,1f);
        LinearLayout l2 = new LinearLayout(this); //sub linearlayout
        l2.setOrientation(LinearLayout.VERTICAL);//with vertical orientation
        l2.setLayoutParams(layoutParams);
        LinearLayout l3 = new LinearLayout(this); //sub linearlayout
        l3.setOrientation(LinearLayout.VERTICAL);//with vertical orientation
        l3.setLayoutParams(layoutParams);
        int totalvalues=41;     //i take count as 41
        for(int i=0;i<totalvalues;i++){  // add the buttons in the layout based on condition
            Button okButton=new Button(this);
            okButton.setText("Button"+i);
            if(i<=totalvalues/2){
            l2.addView(okButton);
            }
            else{
            l3.addView(okButton);   
            }
        }
        ll.addView(l2);   //add sub linearlayout to root linearlayout
        ll.addView(l3);  //add sub linearlayout to root linearlayout
    
        scrollView.addView(ll); //add the root linearlayout to scrollview
    
        setContentView(scrollView);
    
    
    }
    
    0 讨论(0)
  • 2020-12-31 11:21

    Have you tried:

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    float dpW = 0f;
    int pixelsW = (int) (metrics.density * dpW + 0.5f);
    TableLayout.LayoutParams lp = new TableLayout.LayoutParams(pixelsW, LayoutParams.WRAP_CONTENT, 1f);
    TextView txt = new TextView(MainActivity.this);
    ImageView img = new ImageView(MainActivity.this);
    txt.setLayoutParams(lp);
    img.setLayoutParams(lp);
    

    Using TableLayout's LayoutParams, you can set the weight of the view, which, as you know, must be 1. We also use DisplayMetrics to convert a float into the "dp" format used in xml.

    EDIT:

    You can also set this LayoutParams to a LinearLayout.

    0 讨论(0)
  • 2020-12-31 11:23

    You could easily do this with nested LinearLayouts:

     <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
    
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" >
    
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/item" />
    
                <TextView
                    android:id="@+id/text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
    
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" >
    
                <ImageView
                    content here/>
    
                <TextView
                    content here/>
    
            </LinearLayout>
        </LinearLayout>
    

    Then all that you need to do is put A, B and C in the first vertical layout, and D, E and F in the second.

    0 讨论(0)
提交回复
热议问题