我需要将TextView的基准定位为距离容器底部20dp的方式。

我怎样才能做到这一点?

具有底部边距或填充的布局会产生相同的结果。

我想在紫色行上输入文字“sit”。
当我写“sit”时,我的意思是“wert”应该碰到这行,而不是“q ... y”。

填充/边距等于紫色正方形的大小:

最佳答案

如果您仍然需要它,我编写了自定义方法,以免创建大量自定义 View 。它对我来说适合TextView:

public static void applyExistingBotMarginFromBaseline(View view) {
    final int baseline = view.getBaseline();
    final int height = view.getHeight();

    final ViewGroup.MarginLayoutParams marginLayoutParams;
    try {
      marginLayoutParams = ((ViewGroup.MarginLayoutParams) view.getLayoutParams());
    } catch (ClassCastException e) {
      throw new IllegalArgumentException("Applying margins on a view with wrong layout params.");
    }

    final int baselineMarginValue = baseline + marginLayoutParams.bottomMargin;

    marginLayoutParams.bottomMargin = baselineMarginValue - height;

    view.setLayoutParams(marginLayoutParams);
}

您可以在已测量 View 时应用它,如下所示:
final TextView title = (TextView) findViewById(R.id.title);

title.post(new Runnable() {
      @Override public void run() {
        Utils.applyExistingBotMarginFromBaseline(title);
      }
});

您也可以使用数据绑定(bind)框架并使用一些自定义方法编写自己的自定义BindingAdapter,以从xml中使用它。

10-04 13:13