13

我必须将单个线性布局拆分为两列(如报纸专栏)。线性布局包含文本视图图像视图

我已经采用了屏幕宽度并将其划分为一半并将TextViewandImageView放在第一列中,即A B C 下图中的块..现在剩下的TextViewand '必须像这样进入ImageView下一列D E F.所以如果有人给我任何代码或想法来实现它会很有帮助..我尝试过GridView不适合我的问题。由于TextViewImageView大小不明确。

在此处输入图像描述

我不知道如何拆分 Liner 布局。我尝试像这样计算rootlayout高度

linearLayout.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                int linsize=linearLayout.getHeight();
                int relsize=root.getHeight();
                int textsize=txt1.getHeight();
                mainheight=relsize;
                subheight=linsize;
                Toast.makeText(getApplicationContext(), "Linerlayout "+linsize, Toast.LENGTH_LONG).show();
                Toast.makeText(getApplicationContext(), "Relative layout"+relsize, Toast.LENGTH_LONG).show();
                Toast.makeText(getApplicationContext(), "text height "+textsize, Toast.LENGTH_LONG).show();

                if(mainheight==subheight)
                {
                    Toast.makeText(getApplicationContext(), "make a new linear layout", Toast.LENGTH_LONG).show();
                    createsubview();
                }
            }
        }); 

截屏

在此处输入图像描述

4

3 回答 3

8

您可以使用嵌套轻松做到这一点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>

然后,您需要做的就是将 A、B 和 C 放在第一个垂直布局中,将 D、E 和 F 放在第二个垂直布局中。

于 2013-03-07T11:45:47.350 回答
1

你不能用 GridView 做到这一点。您必须创建一个自定义视图来执行此操作。

如果你知道你的网格项目有多大,你可以偷工减料。GridView 很复杂,主要是因为它处理任何大小的项目并动态加载它们。对您来说更简单的方法可能是:

1.创建一个Horizo​​ntalScrollView,里面有一个水平的LinearLayout。

2.确定您的项目的多少行将适合屏幕。调用此行。

3.虽然你还有需要布局的项目:

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

与“水平 GridView”相比,有一些缺点:

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.

优点:

1.It's very easy to implement.

有关更多信息,请参阅此链接

@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);


}
于 2013-03-07T11:45:55.147 回答
0

你有没有尝试过:

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);

使用 TableLayout 的 LayoutParams 可以设置视图的权重,如你所知,它必须为 1。我们还使用 DisplayMetrics 将浮点数转换为 xml 中使用的“dp”格式。

编辑:

您还可以将此 LayoutParams 设置为 LinearLayout。

于 2015-03-03T09:23:41.130 回答