使用水平线性布局时,Android元素会被切断

时间:2015-09-02 04:08:31

标签: android android-layout android-linearlayout elements

我使用LinearLayout显示一些ImageButtons。基本上我打算做的是给每个ImageButton一个特定的固定大小,然后根据屏幕大小,连续显示ImageButton的数量。理想情况下,在手机上连续只有2个ImageButtons。

但是当使用LinearLayout时,发生的事情是,不是将额外的ImageButtons移动到一行上的下一行,而是将ImageButtons切断。

以下是代码:

x.y+=b;

2 个答案:

答案 0 :(得分:0)

复制此代码并尝试

public class MyActivity extends Activity implements MyInterfaceListener{
        @Override
         public void myMethod(yourParameters) {
              //do your stuff here. do whatever you want to do with the //parameter list which is nothing but data from FragmentA.
                FragmentB fragment = (FragmentB) getSupportFragmentManager().findFragmentById(R.id.yourFragmentB);
                fragment.methodInFragmentB(sendDataAsArguments);// calling a method in FragmentB and and sending data as arguments. 
        }
}

答案 1 :(得分:0)

LinearLayout不会将事物从一行包装到另一行。我不认为提供SDK的那个可以做到这一点,但我确定有一些第三方的。

您有多种选择。

  1. 每行只放少一些(每行需要一个单独的LinearLayout)。

  2. 在运行时构建行,而不是在XML中静态声明它们。它有点棘手,但你可以在代码中创建每个按钮,然后决定它是否适合当前行。如果没有,则创建一个新的LinearLayout并将其添加到整体布局中。

  3. 您可以创建自己的布局。这并不像看起来那么难。这项工作基本上以两种方式进行:onMeasure()和onLayout()。

  4. 顺便说一下,我认为你可能会遇到一些偶然的问题,因为你正在整合来自RelativeLayout的标签(例如android:layout_alignParentTop =" true"),这些标签与LinearLayout无关。此外,对于LinearLayout,请务必指定方向。

    这里有一些代码草图(我已经省略了参数,但这会给你一个模型):

    LinearLayout outerLayout = (LinearLayout)findViewById (R.id.outer_layout);
    LinearLayout rowLayout = null;
    int rowWidth = 0;
    int screenWidth = get screen width;
    for (int i = 0;  i < buttonCount;  i++)
    {
      ImageButton b = new ImageButton();
      b.setText();  b.... // other attributes;
    
      // add to current row
      if (rowLayout != null)
        if (b.getIntrinsicWidth() + rowWidth > screenWidth)
          rowLayout = null;
      if (rowLayout == null)
      {
        rowLayout = new LinearLayout();
        outerLayout.add (rowLayout);
      }
      rowLayout.add (b);
      rowWidth += b.getIntrinsicWidth();
    }
    

    在实际布局之前获取尺寸是很棘手的。换句话说,您无法创建按钮然后使用getWidth()。它将返回0. getIntrinsicWidth()我相信它会起作用,但不包括你可能想要的边距或其他调整。所以你必须手动添加它们。

    或者,可以将元素渲染到位图,然后获取它们的尺寸。在你的情况下,第一种方式可能更容易和充分。

    我在这里和那里省略了一些参数是有利的。写的代码太多了:)