更新LayoutParams后,EditText不会换行到下一行

时间:2015-10-23 12:21:13

标签: android

在My Custom AbsoluteLayout中,我按如下方式覆盖updateViewLayout:

参数" view"这是一个EditText。

  @Override public void updateViewLayout(View view, ViewGroup.LayoutParams params) {
    super.updateViewLayout(view, params);
    params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
    view.setLayoutParams(params);
  }

这会导致EditText在到达自定义布局的末尾时不会换行。这是一个屏幕截图,显示了正在发生的事情 enter image description here

编辑:只是为了澄清,将EditText拖到视图上的任何位置后都会发生这种情况。否则在拖动之前它会顺利运行。如果它的原因在onDrop方法中。这是我的自定义布局中的OnDrop方法。我按照this guide

实施
public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset,
      DragView dragView, Object dragInfo)
  {
    final EditText v = (EditText) dragInfo;

    int dragViewWdith = dragView.getWidth();
    int dragViewHeight = dragView.getHeight();
    int layoutWidth = this.getWidth();
    int layoutHeight = this.getHeight();
    int left = x - xOffset;
    int top = y - yOffset;

    L.e("layoutWidth : " + layoutWidth);

    if (left < 0) {
      left = 0;
    }
    if (left + dragViewWdith > layoutWidth) {
      left = layoutWidth - dragViewWdith;
    }
    if (top < 0) {
      top = 0;
    }
    if (top + dragViewHeight > layoutHeight) {
      top = layoutHeight - dragViewHeight;
    }

    final MyAbsoluteLayout.LayoutParams params = new MyAbsoluteLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT, left, top);
    v.post(new Runnable() {
      @Override public void run() {
        updateViewLayout(v, params);
      }
    });

1 个答案:

答案 0 :(得分:0)

尝试在活动的onCreate方法中执行此操作。

您需要首先知道editText所属的Parent ViewGroup的类型,因此如果它是RelativeLayout,您可以这样做。

  1. 首先在ediText上获取处理程序。
  2. 按以下方式设置layoutParams:

    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(                 RelativeLayout.LayoutParams.WRAP_CONTENT,                 RelativeLayout.LayoutParams.WRAP_CONTENT);

  3. 您可以通过说

    将RelativeLayout.LayoutParams应用于editText

    editText.setLayoutParams(RLP);