【问题标题】:Android padding between textviews programmatically以编程方式在文本视图之间进行 Android 填充
【发布时间】:2016-01-11 10:39:16
【问题描述】:

我以编程方式创建了 textviews,并将其添加到我的布局中,但我有一个问题。我无法在我的 textviews 之间填充。这是我的来源

private class DigitView extends TextView {
    public DigitView(Context context) {
        this(context, null);
    }

    public DigitView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DigitView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);


        // If selected draw the accent
        if (isSelected()) {
            this.setBackgroundResource(R.drawable.background_border);

        }
        else
        {
            this.setBackgroundResource(R.drawable.background_border_unselect);
        }

    }

}

这是我的 xml 代码(我在这个布局中添加了我的文本视图)

 <LinearLayout
        android:id="@+id/my_Container_child"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         >
    </LinearLayout>




  for (int i = 0; i < mDigits; i++) {
        digitView= new DigitView(getContext());
        digitView.setWidth(valueInPixels);
        digitView.setHeight(valueInPixels);
        digitView.setTextColor(Color.GREEN);
        digitView.setTextSize(mDigitTextSize);
        digitView.setGravity(Gravity.CENTER);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            digitView.setElevation(mDigitElevation);
        }
        childView.addView(digitView);
    }

正如我所说,我可以在我的布局中添加 4 个文本视图(mDigits 为 4),但我无法在我的文本视图之间添加填充 我怎样才能解决我的问题?如果有人知道解决方案,请帮助我 谢谢大家

【问题讨论】:

  • 来自docs:“填充可用于将视图内容偏移特定数量的像素。”因此 视图之间不存在填充。还有“即使视图可以定义填充,但它不提供对边距的任何支持。但是,视图组提供了这样的支持。有关详细信息,请参阅 ViewGroup 和 ViewGroup.MarginLayoutParams。”

标签: android textview padding


【解决方案1】:

无论 TextView 的父布局是什么,您都需要为每个 TextView 创建适当的 LayoutParams 对象。此外,您应该使用 layoutParams 作为宽度和高度,而不是直接在视图上设置它们。

LinearLayout layout = (LinearLayout) findViewById(R.id.my_Container_child);
for (int i = 0; i < mDigits; i++) {
    DigitView digitView = new DigitView(getContext());
    digitView.setTextColor(Color.GREEN);
    digitView.setTextSize(mDigitTextSize);
    digitView.setGravity(Gravity.CENTER);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        digitView.setElevation(mDigitElevation);
    }

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(valueInPixels, valueInPixels);
    if (i > 0) {
        lp.leftMargin = ...; // this adds space between this view and the previous one
    }
    layout.addView(digitView, lp);
}

编辑

或者,如果您在LinearLayout 上使用可绘制的空白分隔符,则可以不使用LayoutParams 执行此操作。

res/drawable/empty_divider.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="0dp" android:width="8dp" />
</shape>

在您的布局文件中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showDividers="middle"
    android:divider="@drawable/ll_divider">

    <!-- ... -->

</LinearLayout>

【讨论】:

  • 我有一个问题。例如,我的容器布局目前的宽度为 216 dp,我如何以编程方式计算填充?
  • @donoachua 您只能在 LinearLayout 测量一次后执行此操作,否则在其上调用 getWidth() 将返回零。如果您知道它的宽度并且您知道要添加多少个 TextView(并且您已经计算了 TextView 的宽度),那么您可以计算两者之间的边距。或者,您可以编写自己的 LinearLayout 子类(或 ViewGroup,这可能会更难)在布局子类时自动执行此操作。
【解决方案2】:

您是否已经尝试过:

digitView.setPadding(...);

From Docs

【讨论】:

  • 你的父布局是什么样子的?
  • 您可能缺少线性布局的方向。不确定这是否重要。请注意,您正在以像素为单位设置填充!
  • 正如 ci_ 指出的那样,这不是为了在两个视图之间添加空间。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 2012-06-12
  • 2012-03-29
  • 2012-05-16
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多